簡體   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