使用Python拟合多项式表面
问题描述:
我有一个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)
但在这一点上我越来越迷茫,我不知道,如果这是得到的参数为我的拟合函数的正确方法。这个问题可能还有其他解决方案吗?非常感谢!
答
我编写了一个Python tkinter GUI应用程序,它完成了这一任务,它使用matplotlib绘制曲面图并可以将拟合结果和图形保存为PDF。该代码是在github在:
https://github.com/zunzun/tkInterFit/
尝试将3D多项式“全二次”,因为它是你的问题出相同的公式。