Numpy多项式函数
多项式函数是变量的整数次幂与系数的乘积之和,可以用下面的数学公式表示:
f(x) = a[n]*x^n + a[n-1]*x^(n-1) + … + a[2]*x^2 + a[1]*x + a[0]
由于多项式函数只包含加法和乘法运算,因此它很容易计算,并且可以用于计算其他数学函数的近似值。多项式函数的应用非常广泛,例如在嵌入式系统中经常会用它计算正弦、余弦等函数。在Numpy中,多项式函数的系数可以用一维数组表示。
例:f(x)=x^3 - 2x + 1可以用下面数组表示,其中a[0]是最高次的系数,a[-1]是常数项,注意x^2的系数为0。
1 #-*- coding:utf-8 -*- 2 3 ''' 4 导入函数库 5 ''' 6 import numpy as np 7 8 #f(x) = x^3 -2x + 1 9 a = np.array([1,0,-2,1]) 10 #调用poly1d(a)将系数转换为一元多项式 11 f = np.poly1d(a) 12 print(type(f)) 13 print('传入值得到的具体结果',f([1,2,3,4])) 14 #多项式的加法 15 newp = f + [1,1,3] 16 print(newp)
多项式对象的deriv()和integ()方法分别计算多项式函数的微分和积分
1 #求微分和积分 2 f.deriv() 3 f.integ()
多项式的根可以用roots()函数来计算
而poly()函数可以将根转换回多项式的系数
1 roots = np.roots(f) 2 np.poly(roots)
polyfit()函数可以对一组数据使用多项式函数进行拟合,找到和这组数据最接近的多项式的系数。我们来计算-π/2~π/2区间与sin(x)函数最接近的多项式的系数:
1 x = np.linspace(-np.pi/2,np.pi/2, 1000) 2 y = np.sin(x) 3 for arg in [3,5,7]: 4 print(np.polyfit(x, y, arg))
第一步:通过linespace()将-π/2~π/2区间分为1000-1份。
第二步:计算拟合目标函数sin(x)的值。
第三步:将目标函数的数组传递给polyfit()进行拟合,第三个参数arg为多项式函数的最高阶数。polyfit()所得到的多项式和目标函数在给定的1000个点之间的误差最小,polyfit()返回多项式的系数数组。
第四步:使用polyval()计算多项式函数的值,并计算与目标函数的差的绝对值。