Python Numpy计算特定数学公式结果与预期不符问题排查
排查高斯分布相关公式的Python实现错误
需要计算的数学公式为:
b + a × exp(-(ln t - m)²/(2s²)) / (t × s × √(2π))
已知参数:
t=14.4022468115 a=2255.5422194535317 b=8.75408541256545 m=2.853672849711247 s=0.4316116619435228
使用口袋计算器、Desmos等工具计算得到预期结果:140.636091727
但以下Python Numpy实现的函数:
import numpy as np def func(t, a, b, m, s): return b + a*(np.exp((-1)*((np.log(t)-m)**2)/(2*s**2))) / (t)*(s)*np.sqrt(2*np.pi)
调用 func(t,a,b,m,s) 得到结果:163.1201224885765,与预期不符。
问题原因
Python中乘法和除法为同级运算,执行顺序从左到右。原函数的表达式中,/(t)*(s)*np.sqrt(2*np.pi) 会被解析为 (a*exp(...)/t) * s * sqrt(...),而不是公式要求的 a*exp(...) / (t*s*sqrt(...)),导致分母计算错误。
修正后的函数
给整个分母添加括号,确保运算顺序正确:
import numpy as np def func(t, a, b, m, s): return b + a * np.exp(-((np.log(t)-m)**2)/(2*s**2)) / (t * s * np.sqrt(2*np.pi))
修正后调用函数,结果与预期一致:140.636091727
内容的提问来源于stack exchange,提问作者温泽海
相关产品推荐
相关产品推荐

