我正面臨着aproximation多項式擬合的問題。我的問題更詳細的回顧顯示HERE。 基本上我想通過長時間的數學運算來獲得多項式的中間部分,如下所示。 我得到的想法是從多項式的末端(它的點)開始和範圍內取一個範圍,並做出一個近似多項式,它在中段沒有波動;選定的點如下所示。 但是通過使用polyfit
函數,我並沒有完全得到我所希望的多項式。 擬合給定數據的近似多項式
這我的代碼的關鍵部分:
from sympy import*
import numpy as np
init_printing()
%matplotlib inline
import matplotlib.pyplot as plt
S = np.linspace(25, 400, 1000)
SS = np.log10(S)
def f(logS): # the polynomial that I got
return 10**(-57.2476193068601*logS**5 + 585.900632193053*logS**4 - 2384.35277925916*logS**3 + 4821.25582425353*logS**2 - 4845.47249368281*logS + 1943.75303313331)
xdata = f(SS)
ydata = S
plt.figure(figsize=(12, 10), dpi= 600, facecolor='w', edgecolor='k')
plt.loglog(xdata, ydata,'k-')
# Data for new polynomial (approximation)
XX = xdata[:40].tolist()
X1 = xdata[len(xdata)-350:].tolist()
YY = ydata[:40].tolist()
Y1 = ydata[len(ydata)-350:].tolist()
for i in range(len(X1)):
XX.append(X1[i])
YY.append(Y1[i])
# Approximation polynomial fit
plt.loglog(XX,YY,'mo')
x_t = np.linspace(np.min(xdata), np.max(xdata),1000)
p = np.poly1d(np.polyfit(XX,YY, deg=5))
plt.loglog(x_t, p(x_t),'g-')
print(p)
plt.ylim((np.min(ydata), np.max(ydata)))
plt.xlim((np.min(xdata), np.max(xdata)*0.7))
plt.xlabel('xdata')
plt.ylabel('ydata')
plt.grid(True, which="both")
我想就如何解決這個近似多項式問題或是否有另一種方式來解決中段揮舞一些建議 - 一個更好的平滑方式。 任何幫助,高度讚賞!
您是否嘗試過增加多項式的順序? – gabra
我想使用與原始多項式相同的近似多項式。這是平滑中段的想法,並最終比較它們的係數...... – mcluka
很難找到一個多項式來跨越您的空間並重現該數據。分段多項式很容易。我會嘗試。 – duffymo