python多元非线性函数拟合
时间: 2023-07-07 14:45:31 浏览: 329
Python中有多种库可以用于多元非线性函数拟合,其中最常用的是SciPy。下面是一个简单的例子,假设我们想要拟合以下函数:
```
f(x, y) = a * x**2 + b * y**2 + c * x * y + d * x + e * y + f
```
我们可以使用SciPy中的`curve_fit`函数来进行拟合:
```python
import numpy as np
from scipy.optimize import curve_fit
# 定义要拟合的函数
def func(xy, a, b, c, d, e, f):
x, y = xy
return a * x**2 + b * y**2 + c * x * y + d * x + e * y + f
# 生成一些随机数据作为样本
x_data = np.linspace(-1, 1, num=20)
y_data = np.linspace(-1, 1, num=20)
X, Y = np.meshgrid(x_data, y_data)
noise = np.random.normal(0, 0.1, size=X.shape)
Z = func((X, Y), 1, 2, 3, 4, 5, 6) + noise
# 初始猜测参数
initial_guess = [1, 1, 1, 1, 1, 1]
# 进行拟合
popt, pcov = curve_fit(func, (X, Y), Z, p0=initial_guess)
# 输出拟合结果
print('a =', popt[0])
print('b =', popt[1])
print('c =', popt[2])
print('d =', popt[3])
print('e =', popt[4])
print('f =', popt[5])
```
在上面的代码中,我们首先定义了要拟合的函数`func`,然后生成了一些随机数据作为样本,接着使用`curve_fit`函数进行拟合,最后输出拟合结果。`curve_fit`函数需要传入要拟合的函数、样本数据、以及初始猜测的参数值。拟合完成后,返回的`popt`变量即为拟合出的最优参数值。
阅读全文