在Python中拟合多元curve_fit

我正在尝试将简单函数适合python中两个独立数据的数组。我知道我需要将独立变量的数据打包到一个数组中,但是在尝试拟合时传递变量的方式似乎仍然存在问题。(以前有几篇与此相关的文章,但并没有太大帮助。)

import numpy as np

import matplotlib.pyplot as plt

from scipy.optimize import curve_fit

def fitFunc(x_3d, a, b, c, d):

return a + b*x_3d[0,:] + c*x_3d[1,:] + d*x_3d[0,:]*x_3d[1,:]

x_3d = np.array([[1,2,3],[4,5,6]])

p0 = [5.11, 3.9, 5.3, 2]

fitParams, fitCovariances = curve_fit(fitFunc, x_3d[:2,:], x_3d[2,:], p0)

print ' fit coefficients:\n', fitParams

我读到的错误,

raise TypeError('Improper input: N=%s must not exceed M=%s' % (n, m)) 

TypeError: Improper input: N=4 must not exceed M=3

什么是M长度?是N长度p0吗?我在这里做错了什么?

回答:

N和M在该功能的帮助中定义。N是数据点的数量,M是参数的数量。因此,您的错误基本上意味着您至少需要与参数一样多的数据点,这很合理。

该代码对我有用:

import numpy as np

import matplotlib.pyplot as plt

from scipy.optimize import curve_fit

def fitFunc(x, a, b, c, d):

return a + b*x[0] + c*x[1] + d*x[0]*x[1]

x_3d = np.array([[1,2,3,4,6],[4,5,6,7,8]])

p0 = [5.11, 3.9, 5.3, 2]

fitParams, fitCovariances = curve_fit(fitFunc, x_3d, x_3d[1,:], p0)

print ' fit coefficients:\n', fitParams

我包含了更多数据。我也已更改fitFunc为以仅作为单个x的函数进行扫描的形式编写-

装配工将处理对所有数据点的调用。您发布的代码也引用x_3d[2,:],导致了错误。

以上是 在Python中拟合多元curve_fit 的全部内容, 来源链接: utcz.com/qa/427198.html

回到顶部