繁体   English   中英

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

[英]Polynomial fit using curve_fit()

我一直在尝试使用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')

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

正如已经指出的, ^是按位运算符,即按位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 ])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM