簡體   English   中英

如何使用非線性插值確定曲線上的單個值

[英]How do I use nonlinear interpolation to determine a single value on a curve

我的數據如下所示:

非線性數據

當我 plot 它看起來像這樣:

在此處輸入圖像描述

我已經能夠使用這樣的代碼來擬合我的數據的非線性曲線:

df = pd.read_csv('data.csv')

X = df['Molecular Weight']
y = df['Time 1']

f = interpolate.interp1d(X, y)
f2 = interpolate.interp1d(X, y, kind='cubic')

plt.plot(X, y, 'o', X, f2(X), '-')
plt.legend(['data', 'cubic spline'], loc='best')
plt.show()

給我一個 plot 像這樣:

在此處輸入圖像描述

我的問題是:我將如何使用這個 function 來解釋 5.111 點的值?

您將永遠無法使用您用來插值點的 function 來獲得用於插值的點的最大值和最小值之外的值; 在您的情況下,這些是最低的 1350 和最高的 670000。

如果您想獲得更小的值,您應該將數據擬合到可以表示您的數據點的 function。 在您的情況下,我認為二階多項式就足夠了,並且您不能 go 超過四階,因為您只有 5 個點。 您應該始終獲得能夠重現數據的最低程度

您應該使用的 python 代碼是:


X = [670000, 158000, 44000, 17000, 1350]
y = [4.19, 5.469, 6.554, 7.293, 9.109]

polynom = np.polyfit(X, y, 2)
f2 = np.poly1d(polynom)

plt.plot(X, y, 'o', X, f2(X), '-')
plt.legend(['data', 'cubic spline'], loc='best')
plt.show()

在此處輸入圖像描述

從這個 f2 你可以得到 5.11 的值

f2(5.11)

事情的一部分,我認為當你 plot 適合過度表達向量 x 以在你 plot 數據時具有平滑曲線時會更好

x_fit = np.linspace(1350, 670000, 1000)
plt.plot(X, y, 'o', x_fit, f2(x_fit), '-')
plt.legend(['data', 'cubic spline'], loc='best')
plt.show()

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM