利用给定的自变量和因变量,按指定的最高次方拟合多项式
利用到的知识numpy库的一些函数
①numpy.arange(1,21) 返回一个1-20的数组
②numpy.random.rand(20) 返回一个0-1长度为20的数组
③numpy.ployfit(x,y1,1) 拟合函数,按一次多项式拟合(返回一个系数数组)
④numpy.poly1d(coef) 返回拟合的多项式
对了,我顺便讲解一下什么叫一、二次多项式吧(怕小伙伴们迷惑哈哈,我刚开始也不知道哈哈)
一次多项式:y=ax+b ==>> np.ploy1d([a,b])
二次多项式:y=ax2+bx+c ==>> np.ploy1d([a,b,c])
三次多项式:y=ax3+bx2+cx+d ==>> np.ploy1d([a,b,c,d])
代码
# coding=utf-8
import numpy as np
x=np.arange(1,21) #自变量
y1=3*x+x+np.random.rand(20) #构造测试数据y1并加入随机干扰值(因变量)
print(y1)
coef=np.polyfit(x,y1,1) #按一次多项式拟合
print(coef)
yn=np.poly1d(coef) #拟合的多项式
print(yn(x)) #计算拟合值,和y1对比,比较接近
结果:
y1数组
[ 4.89930611 8.64722993 12.89826423 16.81223427 20.50339707 24.60607887
28.09305643 32.84060063 36.61412216 40.03950521 44.75915263 48.03659644
52.5221432 56.91319151 60.78311537 64.98018227 68.75353296 72.16129805
76.47330007 80.68440305]
多项式拟合的系数
[3.99332039 0.67117143]
自变量输入到拟合多项式得到的 y数组,可看到与y1比较接近
[ 4.66449182 8.65781221 12.6511326 16.64445299 20.63777338 24.63109377
28.62441416 32.61773455 36.61105494 40.60437533 44.59769572 48.59101611
52.5843365 56.57765689 60.57097728 64.56429767 68.55761806 72.55093845
76.54425884 80.53757923]
当然,可以进行二次多项式拟合
# coding=utf-8
import numpy as np
x=np.arange(1,21) #自变量
y1=3*x+x+np.random.rand(20) #构造测试数据y1并加入随机干扰值(因变量)
print(y1)
coef=np.polyfit(x,y1,2) #按一次多项式拟合
print(coef)
yn=np.poly1d(coef) #拟合的多项式
print(yn(x)) #计算拟合值,和y1对比,比较接近
[ 4.34276784 8.18057096 12.36204565 16.5741746 20.97329546 24.2875327
28.86611522 32.29807554 36.99781514 40.27918599 44.49843754 48.02514811
52.75800788 56.31923913 60.18414535 64.61488918 68.21064106 72.31415473
76.88935038 80.12144058]
[-1.75858612e-03 4.03189238e+00 3.72338758e-01]
[ 4.40247255 8.42908918 12.45218863 16.4717709 20.48783601 24.50038394
28.50941471 32.5149283 36.51692471 40.51540396 44.51036603 48.50181093
52.48973866 56.47414921 60.4550426 64.43241881 68.40627785 72.37661971
76.34344441 80.30675193]