[英]How do I use the map reduce function in Python to determine a value?
[英]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.