我正在努力擬合實驗資料。為了適應它,我使用了殘差函式的最小化。一切都很瑣碎,但這一次我找不到哪里出了問題,為什么擬合的結果如此奇怪。與原始問題相比,該示例進行了簡化。但無論如何,即使我將使用的引數值設定為初始猜測,它也會給出錯誤的引數。
import matplotlib.pyplot as plt
import numpy as np
import csv
from scipy.optimize import curve_fit, minimize
x=np.arange(0,10,0.5)
a=0.5
b=3
ini_pars=[a, b]
def func(x, a, b):
return a*x b
plt.plot(x, func(x,a,b))
plt.show()
def fit(pars):
A,B = pars
res = (func(x,a, b)-func(x, *pars))**2
s=sum(res)
return s
bnds=[(0.1,0.5),(1,5)]
x0=[0.1,4]
opt = minimize(fit, x0, bounds=bnds)
new_pars=[opt.x[0], opt.x[0]]
example = fit(ini_pars)
print(example)
example = fit(new_pars)
print(example)
print(new_pars)
plt.plot(x, func(x, *ini_pars))
plt.plot(x, func(x, *new_pars))
plt.show()
```[enter image description here][1]
[1]: https://i.stack.imgur.com/qc1Nu.png
uj5u.com熱心網友回復:
它應該new_pars=[opt.x[0], opt.x[1]]代替new_pars=[opt.x[0], opt.x[0]]. 另請注意,您可以通過 直接提取值new_pars = opt.x。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/453070.html
下一篇:在資料面板中生成列模式
