包含两个输入变量的曲线拟合

1 投票
2 回答
3923 浏览
提问于 2025-04-18 13:17

我正在使用 scipy.optimize.curve_fit 这个工具,想要把两个测量的数据系列拟合到第三个测量的数据系列上,也就是说我想找一个函数 f(x,y)=z,其中 x、y 和 z 分别是这三个测量的数据。

我的代码是:

def func_events_model(xy,a,b,c):
 return a*xy[0]+b*xy[1]+c
events_array=numpy.array(events_list)
Tin_array=numpy.array(Tin_list)
barometer_array=numpy.array(barometer_list)
events_array=events_array.reshape(720,1)
Tin_barometer_array=numpy.array([[Tin_list],[barometer_list]])
Tin_barometer_array=Tin_barometer_array.T
popt_model,stats_model=curve_fit(func_events_model,Tin_barometer_array,events_array)

但是我遇到了这个错误信息:

Traceback (most recent call last):
  File "DUKS_dataplot.py", line 100, in <module>
    popt_model,stats_model=curve_fit(func_events_model,Tin_barometer_array,events_array)
  File "/usr/lib/python2.7/dist-packages/scipy/optimize/minpack.py", line 506, in curve_fit
    res = leastsq(func, p0, args=args, full_output=1, **kw)
  File "/usr/lib/python2.7/dist-packages/scipy/optimize/minpack.py", line 355, in leastsq
    gtol, maxfev, epsfcn, factor, diag)
minpack.error: Result from function call is not a proper array of floats.

有没有什么想法可以解决这个问题?或者有没有更好的方法来找到 f(x,y)=z 的最佳拟合?

根据 scipy.optimize.curve_fit 的文档,独立输入可以有多个维度。

2 个回答

0

如果你最开始的想法是把xy中的两个项目分开成不同的参数,你可以这样做:

func_events_model(*the_list, a, b, c)

这会变成:

func_events_model(the_list[0], the_list[1], a, b, c)

1

把函数的定义改成这样:

def func_events_model(xy,a,b,c):
 return a*xy[0]+b*xy[1]+c

就解决了问题。

撰写回答