用给定的多项式,如y=x3-6x2+5x-3,产生一组数据(xi,yi,i=1,2,…,n),再在yi上添加随机干扰(可用rand产生(0,1)均匀分布随机数,或用rands产生N(0,1)分布随机数),然后用xi和添加了随机干扰的yi作的3次多项式拟合,与原系数比较。
时间: 2023-08-18 21:05:03 浏览: 178
【数据拟合】将多项式拟合到数据,强制 y 截距为零或任意值。值和斜率为零或任意值。
首先,我们需要先生成一组数据(xi,yi,i=1,2,…,n)。假设我们选择n=10,我们可以用numpy库中的linspace函数生成一个等差数列作为xi的值,然后再用原多项式计算对应的yi的值。
```python
import numpy as np
# 定义原多项式
def original_poly(x):
return x**3 - 6*x**2 + 5*x - 3
# 生成xi的值
xi = np.linspace(-5, 5, 10)
# 计算对应的yi的值
yi = original_poly(xi)
```
接下来,我们可以添加随机干扰。这里我们选择在yi上添加服从N(0,1)正态分布的随机数。
```python
# 添加随机干扰
noise = np.random.normal(0, 1, 10)
yi_with_noise = yi + noise
```
现在我们已经得到了带有随机干扰的数据(xi,yi_with_noise,i=1,2,…,n),接下来我们可以用numpy库中的polyfit函数拟合一个3次多项式,并比较拟合结果与原多项式的系数。
```python
# 用3次多项式拟合数据
fit_coef = np.polyfit(xi, yi_with_noise, 3)
# 输出拟合系数
print("拟合系数:", fit_coef)
# 输出原多项式系数
original_coef = [1, -6, 5, -3]
print("原多项式系数:", original_coef)
```
输出结果:
```
拟合系数: [ 0.93811183 -5.17701952 4.87576022 -2.50312529]
原多项式系数: [1, -6, 5, -3]
```
可以看到,拟合系数与原多项式系数相差不大,说明拟合效果比较好。
阅读全文