多项式MATLAB命令

一个多项式的幂级数形式可表示为:

y=c1xn+c2xn1++cnx+cn+1 y = c 1 x n + c 2 x n − 1 + ⋯ + c n x + c n + 1

也可表为嵌套形式:

y=(((c1x+c2)x+c3)x+cn)x+cn+1 y = ( ⋯ ( ( c 1 x + c 2 ) x + c 3 ) x ⋯ + c n ) x + c n + 1

或因子形式:

y=c1(xr1)(xr2)(xrn) y = c 1 ( x − r 1 ) ( x − r 2 ) ⋯ ( x − r n )

N阶多项式n个根,其中包含重根和复根。若多项式所有系数均为实数,则全部复根都将以共轭对的形式出现 。

幂系数:

在MATLAB里,多项式用行向量表示,其元素为多项式的系数,并从左至右按降幂排列。

例1:

y=2x3+x2+4x+5 y = 2 x 3 + x 2 + 4 x + 5

在matlab中被表示为 :

p=[2 1 4 5]
poly2sym(p)
ans =
2*x^3+x^2+4*x+5

多项式函数调用:

Roots:多项式的零点可用命令roots求的。
如例1:

 >> r=roots(p)   
   r =
       0.2500 + 1.5612i
       0.2500 - 1.5612i
       -1.0000 

所有零点由一个列向量给出。

Poly:由零点可得原始多项式的各系数,但可能相差一个常数倍。
如例1:

 >> poly(r)
     ans =
    1.0000    0.5000    2.0000    2.5000

注意:若存在重根,这种转换可能会降低精度。

如例2:

y=(x1)6=x66x5+15x420x3+15x26x+1 y = ( x − 1 ) 6 = x 6 − 6 x 5 + 15 x 4 − 20 x 3 + 15 x 2 − 6 x + 1

 >> r=roots([1 -6 15 -20 15 -6 1]) 
              r =
                  1.0042 + 0.0025i
                  1.0042 - 0.0025i
                  1.0000 + 0.0049i
                  1.0000 - 0.0049i
                  0.9958 + 0.0024i
                  0.9958 - 0.0024i

舍入误差的影响,与计算精度有关。

polyval:计算多项式的值。
如例3:

y=3x47x3+2x2+x+1 y = 3 x 4 − 7 x 3 + 2 x 2 + x + 1

计算y(2.5)的值

>> c=[3,-7,2,1,1]; 
>>xi=2.5; 
>>yi=polyval(c,xi)
 yi =
        23.8125

如果xi是含有多个横坐标值的数组,则yi也为与xi长度相同的向量。

>>c=[3,-7,2,1,1];  
>>xi=[2.5,3];
>>yi=polyval(c,xi)
yi =
   23.8125   76.0000

polyfit:给定n+1个点将可以唯一确定一个n阶多项式。利用命令polyfit可容易确定多项式的系数。
(曲线拟合:已知离散点上的数据集,即已知在点集上的函数值,构造一个解析函数(其图形为一曲线)使在原离散点上尽可能接近给定的值)

如例4:

>> x=[1.1,2.3,3.9,9.1];
>> y=[3.887,4.276,4.651,2.117];
>> a=polyfit(x,y,length(x)-1)  %Polyfit的第三个参数是多项式的阶数。
a =
  13 列
   -0.0093    0.0355    0.2870
  43.5406
>>  poly2sym(a)  %求出多项式
 ans =

- (647*x^3)/69888 + (5117895565554271*x^2)/144115188075855872 + (2585253578334195*x)/9007199254740992 + 7972787511422351/2251799813685248

多项式积分:

y=c1xn+c2xn1++cnx+cn+1 y = c 1 x n + c 2 x n − 1 + ⋯ + c n x + c n + 1

Y=ydx=c1n+1xn+1+c2nxn++cn2x2+cn+1x+cn+2 Y = ∫ y d x = c 1 n + 1 x n + 1 + c 2 n x n + ⋯ + c n 2 x 2 + c n + 1 x + c n + 2

poly_itg(p)求多项式积分。
调用格式:py=poly_itg(p)
p:被积多项式的系数
py:求积后多项式的系数

poly_itg.m
          function py=poly_itg(p)
          n=length(p);
          py=[p.*[n:-1:1].^(-1),0]

不包括最后一项积分常数
多项式微分:

y=c1xn+c2xn1++cnx+cn+1 y = c 1 x n + c 2 x n − 1 + ⋯ + c n x + c n + 1

y=nc1xn1+(n1)c2xn2++cn y ′ = n c 1 x n − 1 + ( n − 1 ) c 2 x n − 2 + ⋯ + c n

Polyder:求多项式一阶导数的系数。
调用格式为: b=polyder(c )

c为多项式y的系数,b是微分后的系数,其值为:

[nc1,(n1)c2,,cn] [ n c 1 , ( n − 1 ) c 2 , ⋯ , c n ]

两个多项式的和与差:

ya=a1xm+a2xm1++amx+am+1 y a = a 1 x m + a 2 x m − 1 + ⋯ + a m x + a m + 1

yb=b1xn+b2xn1++bnx+bn+1 y b = b 1 x n + b 2 x n − 1 + ⋯ + b n x + b n + 1

poly_add:求两个多项式的和,其调用格式为:
c= poly_add(a,b)
多项式a减去b,可表示为:
c= poly_add(a,-b)

功能:两个多项式相加
调用格式:b=poly_add(p1,p2)
b:求和后的系数数组

main.m
p1=[1,3,4];
p2=[2,1,3];
b=poly_add(p1,p2)
##########################
poly_add.m
function p3=poly_add(p1,p2)
n1=length(p1);
n2=length(p2);
if n1==n2  p3=p1+p2;end
if n1>n2   p3=p1+[zeros(1,n1-n2),p2];end
if n1<n2   p3=[zeros(1,n2-n1),p1]+p2;end

b =

     3     4     7

m阶多项式与n阶多项式的乘积是d=m+n阶的多项式

ya=a1xm+a2xm1++amx+am+1 y a = a 1 x m + a 2 x m − 1 + ⋯ + a m x + a m + 1

yb=b1xn+b2xn1++bnx+bn+1 y b = b 1 x n + b 2 x n − 1 + ⋯ + b n x + b n + 1

yc=yayb=c1xd+c2xd1++cdx+cd+1 y c = y a y b = c 1 x d + c 2 x d − 1 + ⋯ + c d x + c d + 1

计算yc系数的MATLAB命令是:

c=conv(a,b)

多项式yb除多项式ya的除法满足:

ya=yqyb+yr y a = y q y b + y r

其中yq是商,yr是除法的余数。多项式yq和yr可由命令

deconv 算出。

例:

[q, r]=deconv(a,b)

例5

例
>> a=[2,-5,6,-1,9]; 
>> b=[3,-90,-18];
>> c=conv(a,b)
c =
     6  -195   432  -453     9  -792  -162
>> [q,r]=deconv(c,b)
q =
     2    -5     6    -1     9
r =
     0     0     0     0     0     0     0
>> poly2sym(c)
 ans =
 6*x^6-195*x^5+432*x^4-453*x^3+9*x^2-792*x-162
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值