【发布时间】:2016-05-25 15:09:25
【问题描述】:
这是我的问题:我有适合模型的实验数据。为此,我使用了 scipy 的 curve_fit。该脚本没有任何错误或警告,但没有给出令人满意的结果(它给了我一个准线而不是两个洛伦兹形图)。
但最奇怪的是,当我给拟合函数一个猜测数组时,除了第三个参数之外,没有一个猜测的参数被修改(尽管它远离预期值)。但是我注意猜测参数的顺序。
我给你合适的代码部分。
X = 927.
Z = 88.
M = 5.e-15
O1 = 92975.
O2 = 93570.
bm = np.arctan2(Z,X)
P0 = 0.
T = np.pi/2.
TM = np.pi/3.
G = 20.
File ="Data.txt"
open(File, "rb")
dat = np.loadtxt(File)
O = dat[:,1]
D = np.sqrt(1./20. *10**(dat[:,7]/10.)*1/((X**2+Z**2)*10**(6)))
def model(W,o1,o2,p0,t,tm,g):
DB = np.abs((1./M)*(np.cos(bm-tm)*(p0*np.cos(t-tm)/(o1**2-W**2-1.j*g*W))+np.sin(bm-tm)*(p0*np.sin(t-tm)/((o2**2-W**2-1.j*g*W)))))
return DB
guess = np.array([O1,O2,P0,T,TM,G])
fit , pcov = curve_fit(model, O , D , guess)
我在整整一个月的时间里搜索了一项研究以发现任何错误,但仍然注意到。函数是否可能对curve_fit复杂?
提前感谢您的帮助。如果您需要更多信息或数据,请不要犹豫
这是O v D 的情节。红点是实验,蓝线是返回拟合参数的函数(没有修改,所以是猜测值)
【问题讨论】:
-
你的模型函数中是否可能不依赖
o2? -
你能给我们看一张
OvsD的图吗? -
您最初的猜测可能不是一个好的猜测,因为
model对所有W的计算结果为零 -
检查
pcov的值。如果包含nan或inf,则拟合不成功。 -
你好@gboffi :不,对
o2的依赖很重要,这是给出我haded 图中两个峰之一的位置的参数。 @WarrenWeckesser:是的, pcov 等于 inf 所以拟合不起作用。我想我会试试 M Newville 的建议,看看lmfit给了我什么
标签: python scipy curve-fitting