import numpy as np
p=np.poly1d([1,2,3]) //多项式的系数,p为多项式
//多项式可以做加减乘除
print(p+[1,2]) //表示多项式加上一个多项式系数为[1,2]
print(p+[-1,-2]) //减法
print(p*p) //表示将多项式p*p 乘法
print(p/[1,2]) //表示多项式p除以多项式 ,系数为【1,2】
//声明多项式的几种方式
a=np.poly1d([1,2,3],True) //多项式的根为【1,2,3】
b=n[.poly1d([1,2,3],True,'z') //未知数为z
print(p.deriv()) //对多项式做微分得到的多项式
print(p.integ()) //对做积分后得到的多项式
//计算多项式的值
print(p[1,2,3]) //表示将x=1,x=2,x=3的多项式函数值计算出来,以数组形式的结果
//计算多项式的根
print(p.root())
其他操作:
p(0.5)表示当x = 0.5时,多项式的值为多少
p([1,2,3])表示当x = 1、2、3时,多项式的值分别为多少
p.r表示当多项式为 0 时,此等式的根
p.c表示生成多项式的系数数组
p.order表示返回最高项的次方数
p[1]表示返回第一项的系数
p.deriv([m])表示求导,参数m表示求几次导数
p.integ([m,k])表示积分,参数m表示积几次分,k表示积分后的常数项的值
多项式在某点上的值:np.polyval(p,x[n]),返回p多项式在横轴点上x[n]上的值
两个多项式做差运算: np.polysub(a,b)
import numpy as np
import matplotlib.pyplot as plt
xxx = np.arange(0, 1000) # x值,此时表示弧度
yyy = np.sin(xxx*np.pi/180) #函数值,转化成度
z1 = np.polyfit(xxx, yyy, 7) # 用7次多项式拟合,可改变多项式阶数;
print(z1)
p1 = np.poly1d(z1) #得到多项式系数,按照阶数从高到低排列
print(p1) #显示多项式
print(p1(xxx))#求xxx对应的拟合函数得到的各个函数值
上面arange得到的是一个数组,根据xxx数组计算的sin值也为一个数组,通过polyfit函数拟合的7次曲线是得到的一个数组,将数组交给poly1d函数得到一个拟合的多项式
图像绘制:
plt.plot(xxx, yyy, '*',label='original values')
#plt.plot(x, y, ls="-", lw=2, label=“plot figure”),
#x: x轴上的数值,y: y轴上的数值,ls:折线图的线条风格,lw:折线图的线条宽度,label:标记图内容的标签文本
plt.plot(xxx, yvals, 'r',label='polyfit values')
plt.xlabel('x axis')
plt.ylabel('y axis')
plt.legend(loc=4) # 指定legend在图中的位置,类似象限的位置
plt.title('polyfitting')
plt.show()
--------------------------------------------------------------------------------------------------------------
plt.legend(loc=4) # 指定legend在图中的位置,类似象限的位置
loc:图例位置,可取(‘best’, ‘upper right’, ‘upper left’, ‘lower left’, ‘lower right’, ‘right’,
‘center left’, ‘center , right’, ‘lower center’, ‘upper center’, ‘center’) ;若是使用了bbox_to_anchor,则这项就无效了
------------------------------------------------------------------------------------------------------------------------------------------------------------
应用:进行最小二乘法的拟合
import numpy as np
import matplotlib.pyplot as plt
x=[1,2,3,4,5,6]
y=[2.6,3.4,4.7,5.5,6.47,7.8]
z1=np.polyfit(x,y,1)
p=np.poly1d(z1)
print(z1)
print(p)
plt.plot(x,y,'r')
z=p(x)
plt.plot(x,z,'b')