使用curve_fit()进行多项式拟合

时间:2019-09-09 08:57:48

标签: python numpy matplotlib

我一直在尝试使用curve_fit()为我的数据点获得最佳的多项式拟合,但是我的代码给出了以下错误。有人可以帮助我理解故障的根源。预先非常感谢。

TypeError:输入类型不支持ufunc'bitwise_xor',并且根据强制转换规则“ safe”,不能将输入安全地强制转换为任何受支持的类型

from scipy.optimize import curve_fit
from scipy.interpolate import *   
def func(x, a, b, c, d):
    return a*x^3 + b*x^2 + c * x + d

Xdata1 = np.array([10, 20, 30, 60])
Ydata1 = np.array([3, 5, 4, 3.5])

plt.plot(Xdata1, Ydata1, 'bo', label='Raw Data')

popt, pcov = curve_fit(func, Xdata1, Ydata1)
a, b, c, d= popt
plt.plot(Xdata1, func(Xdata1, *popt), 'r--', label='fit')

2 个答案:

答案 0 :(得分:4)

您应该使用**而不是^,这是按位运算符

答案 1 :(得分:0)

正如已经指出的,^是按位运算符,即按位XOR(异或)运算符。

https://docs.python.org/2/reference/expressions.html#binary-bitwise-operations

在任何情况下,由于您尝试拟合正则多项式,因此如果您不想处理scipy.optimize包中的自定义函数和参数规范,也可以尝试使用numpy.polyfit功能。您可以指定多项式次数并立即获得系数。 它使用最小二乘法。

在您的情况下,类似

numpy.polyfit(Xdata1,Ydata1,3)

得出3次拟合多项式的系数

array([ 0.34166667, -3.55 , 10.25833333, -4.05 ])