【发布时间】:2021-12-01 22:38:24
【问题描述】:
我正在尝试用scipy.curve_fit 拟合一些实验数据,但拟合在对数对数比例图中效果不佳。我认为问题在于算法正确/不正确地加权较小的值。有人可以帮我解决这个问题吗?
这是我的代码:
import numpy as np
from scipy.optimize import curve_fit
def func(Pe_a,a,b):
return (0.5 * (1 + special.erf(np.log(Pe_a/a)/(2**(0.5)*np.log(b)))))
Pe_a = np.array([1.372322,1.789089,2.315748,5.588003,6.026619,11.165474,24.438136])
si = np.array([5.494556e-04,4.509410e-04,7.419857e-04,2.360942e-02,3.246023e-02,1.213780e-01,5.173072e-01])
popt,pcov = curve_fit(log_norm,Pe_a,si,p0=[np.mean(Pe_a),np.std(Pe_a)],bounds=(1*10**(-10),np.inf))
适合的正确参数应该在a_opt = 24.17 和b_opt = 2.2 左右,但我得到的是a = 23.813 和b = 1.955。数据非常适合标准图(小值接近于零),但对于 log-log,对于较小的 Pe_a 值,我得到较大的偏差。这对进一步的计算影响很大。
提前致谢
火焰兵
【问题讨论】:
-
考虑获取 x 和 y 的对数,在适当调整的模型上执行拟合,并反转变换
标签: python python-3.x scipy curve-fitting