2016-12-06 111 views
0

我有一個python代碼,它可以計算出依賴於x和y值的z值。總而言之,我有7個x和7個y值以及49個z值。使用Python擬合多項式表面

現在,我想擬合z = f(x,y)形式的2次多項式曲面。我找到了一個Matlab命令,它可以實現這個目的。 (https://www.mathworks.com/help/curvefit/fit.html

load franke 
sf = fit([x, y],z,'poly23') 
plot(sf,[x,y],z) 

不過,我想我的計算與Python 2度函數的參數。我試圖用SciPy的curve_fit功能具有以下擬合函數:

def func(a, b, c, d ,e ,f ,g ,h ,i ,j, x, y): 
     return a + b * x**0 * y**0 + c * x**0 * y**1 + d * x**0 * y**2 
       + e * x**1 * y**0 + f * x**1 * y**1 + g * x**1 * y**2 
       + h * x**2 * y**0 + i * x**2 * y**1 + j * x**2 * y**2 

guess = (1,1,1,1,1,1,1,1,1,1) 
params, pcov = optimize.curve_fit(func, x, y, guess) 

但在這一點上我越來越迷茫,我不知道,如果這是得到的參數爲我的擬合函數的正確方法。這個問題可能還有其他解決方案嗎?非常感謝!

回答

1

我編寫了一個Python tkinter GUI應用程序,它完成了這一任務,它使用matplotlib繪製曲面圖並可以將擬合結果和圖形保存爲PDF。該代碼是在github在:

https://github.com/zunzun/tkInterFit/

嘗試將3D多項式「全二次」,因爲它是你的問題出相同的公式。