最小化给出奇怪的结果(多参数拟合)

Minimization gives weird result (multi-parameter fitting)

我正在研究实验数据的拟合。为了适应它,我使用了残差函数的最小化。一切都很琐碎,但是这次我找不到问题所在,也找不到为什么拟合结果如此奇怪。与原始问题相比,该示例得到了简化。但是无论如何,即使我将参数的使用值设置为初始猜测,它也会给出错误的参数。

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

应该是new_pars=[opt.x[0], opt.x[1]]而不是new_pars=[opt.x[0], opt.x[0]]。另请注意,您可以通过 new_pars = opt.x.

直接提取值