python 拟合一元三次方程
时间: 2023-06-25 18:05:10 浏览: 64
可以使用 NumPy 和 Matplotlib 库来拟合一元三次方程。
首先,我们需要定义一个一元三次方程,例如:
```python
def cubic_function(x, a, b, c, d):
return a * x**3 + b * x**2 + c * x + d
```
其中,`a`, `b`, `c`, `d` 是方程的系数。
接着,我们需要准备一些数据点作为拟合的依据。可以使用 NumPy 来生成数据点:
```python
import numpy as np
x_data = np.linspace(-5, 5, 101) # 生成 -5 到 5 之间的 101 个数据点
y_data = cubic_function(x_data, 1, -2, 3, -4) + np.random.normal(size=101) # 添加噪声
```
其中,`np.random.normal` 用于添加随机噪声,以模拟真实数据。
接下来,我们可以使用 Matplotlib 来绘制数据点:
```python
import matplotlib.pyplot as plt
plt.scatter(x_data, y_data, s=10)
plt.show()
```
绘制出来的图像应该是一些散点,看起来像是在一条曲线附近:
![scatter plot](https://i.imgur.com/xQDyUfY.png)
最后,我们使用 `curve_fit` 函数来拟合曲线:
```python
from scipy.optimize import curve_fit
popt, pcov = curve_fit(cubic_function, x_data, y_data)
```
`curve_fit` 函数返回两个参数,`popt` 是拟合出来的系数,`pcov` 是协方差矩阵。
拟合出来的系数可以用来绘制拟合曲线:
```python
x_fit = np.linspace(-5, 5, 1001) # 生成更多的数据点,以便于绘制曲线
y_fit = cubic_function(x_fit, *popt) # 使用拟合出来的系数计算拟合曲线
plt.scatter(x_data, y_data, s=10)
plt.plot(x_fit, y_fit, color='red')
plt.show()
```
拟合曲线应该与数据点比较接近:
![fitting curve](https://i.imgur.com/dVf9M4c.png)
完整的代码如下:
```python
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
def cubic_function(x, a, b, c, d):
return a * x**3 + b * x**2 + c * x + d
x_data = np.linspace(-5, 5, 101)
y_data = cubic_function(x_data, 1, -2, 3, -4) + np.random.normal(size=101)
plt.scatter(x_data, y_data, s=10)
plt.show()
popt, pcov = curve_fit(cubic_function, x_data, y_data)
x_fit = np.linspace(-5, 5, 1001)
y_fit = cubic_function(x_fit, *popt)
plt.scatter(x_data, y_data, s=10)
plt.plot(x_fit, y_fit, color='red')
plt.show()
```