python拟合曲线
时间: 2023-08-17 14:11:36 浏览: 45
在Python中,可以使用numpy、matplotlib和scipy等库来进行曲线拟合。首先,需要安装这些库,可以在命令行中输入以下代码进行安装:pip install numpy matplotlib scipy [1]。
对于二次曲线的拟合,可以使用polyfit函数来拟合数据。例如,给定一组二次曲线型数据,可以使用polyfit函数拟合出该曲线,并返回最大点或对称点的坐标。具体代码如下所示:
```python
import numpy as np
import matplotlib.pyplot as plt
# 模拟生成一组实验数据
x = np.arange(0, 10, 0.2)
y = -(x - 3.5) ** 2 + 4.7
noise = np.random.uniform(-3, 3, len(x))
y += noise
fig, ax = plt.subplots()
ax.plot(x, y, 'b--')
ax.set_xlabel('x')
ax.set_ylabel('y')
# 二次拟合
coef = np.polyfit(x, y, 2)
y_fit = np.polyval(coef, x)
ax.plot(x, y_fit, 'g')
# 找出其中的峰值/对称点
if coef[0] != 0:
x0 = -0.5 * coef[1] / coef[0]
x0 = round(x0, 2)
ax.plot([x0] * 5, np.linspace(min(y), max(y), 5), 'r--')
print(x0)
else:
raise ValueError('Fail to fit.')
plt.show()
```
如果要拟合其他任意函数,可以使用scipy库中的optimize模块的curve_fit函数。首先定义需要拟合的函数,然后给出需要拟合的数据组,使用curve_fit函数得到拟合的参数。具体代码如下所示:
```python
import numpy as np
import matplotlib.pyplot as plt
from scipy import optimize as op
# 需要拟合的函数
def f_1(x, A, B, C):
return A * x**2 + B * x + C
# 需要拟合的数据组
x_group = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y_group = [2.83, 9.53, 14.52, 21.57, 38.26, 53.92, 73.15, 101.56, 129.54, 169.75, 207.59]
# 得到返回的A,B,C值
A, B, C = op.curve_fit(f_1, x_group, y_group)[0]
# 数据点与原先的进行画图比较
plt.scatter(x_group, y_group, marker='o', label='真实值')
x = np.arange(0, 15, 0.01)
y = A * x**2 + B * x + C
plt.plot(x, y, color='red', label='拟合曲线')
plt.legend() # 显示label
plt.show()
```
这样就可以进行曲线拟合并绘制拟合曲线了。希望对你有帮助![2][3]