python二元函数拟合
时间: 2023-07-07 18:21:04 浏览: 167
在 Python 中进行二元函数拟合,可以使用 `scipy.optimize.curve_fit` 函数。
首先,我们需要定义自己的二元函数模型,例如,我们可以定义一个二元高斯函数模型:
```
import numpy as np
def gauss2d(xy, a, b, c, d, e):
x, y = xy
return a * np.exp(-((x-b)**2/(2*c**2) + (y-d)**2/(2*e**2)))
```
其中,`a`、`b`、`c`、`d`、`e` 分别是高斯函数的参数,`xy` 是自变量。
然后,我们可以使用 `curve_fit` 函数进行拟合,例如,我们有一些数据 `data`,其中 `x` 和 `y` 是自变量,`z` 是因变量:
```
from scipy.optimize import curve_fit
x, y = np.meshgrid(np.arange(data.shape[1]), np.arange(data.shape[0]))
xdata = np.column_stack((x.flatten(), y.flatten()))
ydata = data.flatten()
```
我们可以使用 `curve_fit` 函数进行拟合:
```
p0 = [1, 1, 1, 1, 1] # 初始参数
popt, pcov = curve_fit(gauss2d, xdata, ydata, p0)
```
其中,`p0` 是拟合的起始点,可以根据实际情况进行调整。`popt` 是拟合得到的参数,`pcov` 是协方差矩阵。
最后,我们可以使用 `gauss2d` 函数和拟合得到的参数绘制拟合结果:
```
import matplotlib.pyplot as plt
Z = gauss2d((x, y), *popt)
fig = plt.figure()
ax = fig.add_subplot(projection='3d')
ax.plot_surface(x, y, Z)
plt.show()
```
其中,`ax.plot_surface(x, y, Z)` 绘制了拟合后的二元函数曲面。
阅读全文