python非线性最小二乘拟合
时间: 2023-07-08 09:53:42 浏览: 123
非线性最小二乘法拟合问题
在 Python 中,可以使用 SciPy 库中的 optimize 模块来进行非线性最小二乘拟合。具体步骤如下:
1. 导入所需的库:
```python
import numpy as np
from scipy.optimize import curve_fit
```
2. 定义被拟合的函数:
```python
def func(x, a, b, c):
return a * np.exp(-b * x) + c
```
这里的 func 函数是一个带有三个参数的指数函数。
3. 生成模拟数据:
```python
xdata = np.linspace(0, 4, 50)
y = func(xdata, 2.5, 1.3, 0.5)
ydata = y + 0.2 * np.random.normal(size=len(xdata))
```
这里的 xdata 是在 [0, 4] 区间内均匀分布的 50 个数据点,y 是根据 func 函数计算得到的理论值,ydata 是在理论值的基础上加上一些随机噪声得到的实际值。
4. 调用 curve_fit 函数进行拟合:
```python
popt, pcov = curve_fit(func, xdata, ydata)
```
这里的 popt 是一个包含三个拟合参数的数组,pcov 是协方差矩阵。
5. 绘制拟合结果:
```python
import matplotlib.pyplot as plt
plt.plot(xdata, ydata, 'b-', label='data')
plt.plot(xdata, func(xdata, *popt), 'r-', label='fit')
plt.legend()
plt.show()
```
这里使用 matplotlib 库来绘制拟合结果,其中 `func(xdata, *popt)` 表示用拟合得到的参数 popt 对函数进行计算得到的拟合曲线。
阅读全文