我試圖曲線擬合Waldram圖,以便我可以繪製自己的圖。我使用了一個程序,並從圖中得到一條曲線作爲點數據,並且想要計算出公式。曲線擬合具有未知公式(SciPy)的數據集
我對SciPy有一般的認識,在我看來,你需要有某種想法,曲線的公式應該是什麼,我不知道。有沒有辦法在不知道通用公式的情況下求解最佳擬合曲線?
Python Code for my custom points
我試圖曲線擬合Waldram圖,以便我可以繪製自己的圖。我使用了一個程序,並從圖中得到一條曲線作爲點數據,並且想要計算出公式。曲線擬合具有未知公式(SciPy)的數據集
我對SciPy有一般的認識,在我看來,你需要有某種想法,曲線的公式應該是什麼,我不知道。有沒有辦法在不知道通用公式的情況下求解最佳擬合曲線?
Python Code for my custom points
簡短的回答:不,你所需要的模型的某些功能的形式以適應。
理想情況下,您應該能夠根據數據的含義編寫一個包含多個參數(然後優化後)的模型。如果這是不可能的,你需要根據你的領域知識來想出合理的東西。
我使用初始參數估計的遺傳算法擬合了超過400個已知的具有四個或更少參數的已知非線性方程的數據,並根據排序結果選擇了我認爲是一個好的候選方程,作爲懸鏈線轉換方程(帶偏移量) - 見附圖。
y = a * cosh((bx + c)/a) + Offset
a = -9.8413881676827686E-02
b = 8.3564373717938123E-03
c = -3.8850547606358887E-04
Offset = 8.7774689075636331E+01
Degrees of freedom (error): 183
Degrees of freedom (regression): 3
Chi-squared: 2232.72609461
R-squared: 0.985367781841
R-squared adjusted: 0.985127909412
Model F-statistic: 4107.88262167
Model F-statistic p-value: 1.11022302463e-16
Model log-likelihood: -497.209347432
AIC: 5.36052778002
BIC: 5.42964240284
Root Mean Squared Error (RMSE): 3.45538879663
a = -9.8413881676827686E-02
std err: 2.35115E-04
t-stat: -6.41825E+00
p-stat: 1.14906E-09
95% confidence intervals: [-1.28667E-01, -6.81608E-02]
b = 8.3564373717938123E-03
std err: 1.27107E-06
t-stat: 7.41202E+00
p-stat: 4.45377E-12
95% confidence intervals: [6.13203E-03, 1.05808E-02]
c = -3.8850547606358887E-04
std err: 3.74545E-07
t-stat: -6.34812E-01
p-stat: 5.26344E-01
95% confidence intervals: [-1.59599E-03, 8.18980E-04]
Offset = 8.7774689075636331E+01
std err: 2.53913E-01
t-stat: 1.74192E+02
p-stat: 0.00000E+00
95% confidence intervals: [8.67805E+01, 8.87689E+01]
Coefficient Covariance Matrix
[ 1.92706102e-05 -1.41684431e-06 1.54227770e-08 -4.40076630e-04]
[ -1.41684431e-06 1.04180031e-07 -1.21060089e-09 3.25700381e-05]
[ 1.54227770e-08 -1.21060089e-09 3.06987009e-08 -8.90474871e-07]
[ -4.40076630e-04 3.25700381e-05 -8.90474871e-07 2.08113423e-02]
假設多項式往往是一個好主意,也因爲功能可以擴展成(多項式)系列。 –
從圖中你的函數看起來相當週期和對稱,所以你可能很幸運適合他們幾個dct模式。 –
擴展@ a_guest的評論,你可以使用numpy的[polyfit](https://docs.scipy.org/doc/numpy/reference/generated/numpy.polyfit.html)任意度,直到你的曲線被正確地近似(可接受錯誤)。它可能行不通,但是一個很好的起點。 –