2014-06-08 53 views
-1

我有一些數據(xy座標)來自一項研究,我必須繪製它們並找到適合數據的最佳曲線。我的曲線是:Python擬合多項式,冪律和指數數據

  • 多項式達6度;
  • 冪律;
  • 指數。

我能找到多項式最適合與

while(i < 6): 
    coefs, val = poly.polyfit(x, y, i, full=True) 

,我採取最小化val程度。

當我必須適應冪律(最有可能在我的研究中),我不知道如何正確地做到這一點。這就是我所做的。我已將日誌函數應用於所有xy,並且我試圖用線性多項式來擬合它。如果誤差(val)低於之前嘗試過的其他多項式,我選擇冪律函數(自然如果線的m爲負數)。我對麼?

現在我怎麼能重建我的冪律從y = mx + q行,以繪製它與原始點?我還需要顯示找到的功能。

我試圖與:

def power_law(x, m, q): 
    return q * (x**m) 

使用

x_new = np.linspace(x[0], x[-1], num=len(x)*10) 
y1 = power_law(x_new, coefs[0], coefs[1]) 
popt, pcov = curve_fit(power_law, x_new, y1) 

但得到的曲線不擬合數據。

+2

*「看起來效果不好」*是什麼意思?錯誤(提供完整的追溯)?意想不到的產出(提供投入,預期和實際產出)? – jonrsharpe

+0

這是一個方法論上的問題,我不要求一個完整的代碼,代碼在這裏沒有必要。我不是問這個問題。有一個問題:「我是否正確?如何重建權力法?」 – Nadir

+0

曲線不符合數據,所以,從方法論角度來說,我的想法可能不是正確的。 – Nadir

回答

2

如果你谷歌短語「曲線擬合」,我的網站是最高回報 - 所以我知道這種事情。

我建議不要進行任何日誌或其他數據轉換,因爲scipy具有非常適合此類擬合的非線性求解器。請看:

http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.curve_fit.html

我使用SciPy的非線性求解器在我的網站,它可以直接在網上貼合您的數據。嘗試:

http://zunzun.com/Equation/2/Power/Standard%20Power/

,並確保沒有實驗引入偏移,如DC偏移例如電壓,嘗試:

http://zunzun.com/Equation/2/Power/Standard%20Power%20With%20Offset/

的一個問題,你可以在運行與非線性擬合是非線性求解器迭代精化的合適的起始參數集的選擇。 BSD許可的網站源代碼使用遺傳算法自動確定起點,因此您可能需要自己嘗試。它帶有很多例子,包括一個適合數百個方程式的「函數查找器」並對它們進行排序 - 您也可以在線嘗試。源代碼是在谷歌代碼庫在:

https://code.google.com/p/pyeq2/

或鏈接,壓縮和tgz'd源分佈是在每一頁的網站上的底部。

如果您有任何問題,請直接與我聯繫,我會很樂意提供幫助。我喜歡這個東西。

James [email protected]

+1

zunzun.com不見了,鏈接不起作用 – wordsforthewise

+0

Zunzun移居到github。 [谷歌搜索結果](https://www.google.com/search?q=zunzun%20github&ie=utf-8&oe=utf-8) – mikey

+0

我變得太盲目,無法讓網站繼續運行,我的歉意。我仍然可以用右眼看到放大的文字,所以我可以閱讀並回覆電子郵件。 zunzun.com的網站源代碼位於https://github.com/zunzun/zunzunsite/(Python 2.X)和https://github.com/zunzun/zunzunsite3/(Python 3)。 –