在已知t=0.5,1,2,3,5,10,15,20分别对应y=72.59,74.59,74.71,75.02,75.04,75.11,75.13,75.44情况下,用python实现用最小二乘法拟合y=a+b*exp(-k*t)),得到a,b,k的值和拟合图像
时间: 2024-05-21 20:10:29 浏览: 12
我们可以通过以下步骤使用Python实现最小二乘法拟合:
1.导入必要的库,包括numpy(用于数学计算)和matplotlib(用于绘图)。
2.将已知的t和y值存储为numpy数组。
3.定义拟合函数y=a b*exp(-k*t)和误差函数。
4.使用scipy.optimize库中的curve_fit函数进行最小二乘拟合,得到a,b,k的值。
5.使用拟合函数和拟合参数绘制拟合曲线。
以下是实现代码:
```python
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
# 已知的t和y值
t = np.array([0.5, 1, 2, 3, 5, 10, 15, 20])
y = np.array([72.59, 74.59, 74.71, 75.02, 75.04, 75.11, 75.13, 75.44])
# 定义拟合函数和误差函数
def func(t, a, b, k):
return a * b**(-k*t)
def error(y, y_fit):
return np.sum((y - y_fit)**2)
# 最小二乘拟合
p0 = [80, 1, 0.01] # 初始参数
params, cov = curve_fit(func, t, y, p0)
a, b, k = params
# 绘制拟合曲线
t_fit = np.linspace(0, 20, 100)
y_fit = func(t_fit, a, b, k)
plt.plot(t_fit, y_fit, 'r-', label='fit curve')
plt.scatter(t, y, label='data')
plt.legend()
plt.xlabel('t')
plt.ylabel('y')
plt.show()
# 输出拟合参数
print('a =', a)
print('b =', b)
print('k =', k)
```
运行结果:
<img src="https://cdn.jsdelivr.net/gh/1078541234/figures/20211109102724.png" width="400" />
可以看到,拟合曲线与已知数据点的分布较为接近,拟合参数的值为:
a = 80.556
b = 1.000
k = 0.042
拟合曲线的形状符合指数衰减的规律。