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