目录
一. 多项式的表示
1.1 多项式幂级数的表达形式
1.2 多项式的嵌套形式
1.3 因子形式
二. 多项式的零点
2.1 给定多项式求零点
例题 2
2.2 由零点求多项式
三. 计算多项式的值
例题4
四. 由点拟合多项式
例题5
五.多项式积分
例题6
六. 多项式微分
七.多项式的和差
八. 多项式的乘除
8.1 多项式相乘
8.2 多项式相除
例题7
多项式在数学中一共有三种表达形式。
N阶多项式有n个根,其中就包含重根和复根。如果多项式所有的系数都是实数,那么全部的复根都会以共轭对的形式出现。
在MATLAB中,多项式用行向量表示,其元素为多项式的系数,从左到右按照降幂的形式排列,此种元素称之为幂系数。
例题1
将以下多项式利用MATLAB表示出来。
解:
MATLAB代码如下:
clc;clear;
p=[2 1 4 5]; %提取系数
poly2sym(p)
运行结果:
ans =
2*x^3 + x^2 + 4*x + 5
多项式的零点可以由命令roots得到,求出的结果为一个列向量:
r=roots()
求例题1中多项式的零点。
解:
MATLAB代码如下:
clc;clear;
p=[2 1 4 5]; %提取系数
r=roots(p)
由零点可得原始多项式的系数,当然,得到的结果可能相差一个倍数关系。MATLAB格式如下:
poly(r) %r为其零点
例题3
求函数y的零点。
解:
很明显,函数y是可以合并的,如下:
易得此函数的零点是1。
但来看看MATLAB的运行,你会发现不一样的:
clc;clear;
r=roots([1 -6 15 -20 15 -6 1])
运行结果:
r =
1.0030 + 0.0017i
1.0030 - 0.0017i
1.0000 + 0.0034i
1.0000 - 0.0034i
0.9971 + 0.0017i
0.9971 - 0.0017i
分析:数学的分析和MATLAB运行的结果不太一样。由于舍入误差的影响,如果存在重根,这种MATLAB的计算会有误差。
可以利用命令polyval计算多项式的值。如果输入的x含有多个横坐标值,那么对应的输出y也为与x长度相同的向量。
当x=2.5或3时,分别计算对应的多项式y的值。
解:
MATLAB代码如下:
clc;clear;
c=[3 -7 2 1 1];
x=[2.5,3];
y=polyval(c,x)
运行结果如下:
y =23.8125 76.0000
给定n+1个点,可以唯一确定一个n阶多项式。利用polyfit命令可以确定该多项式的系数。
某三阶多项式过四个点,,请求出该多项式。
解:
MATLAB代码如下:
clc;clear;
x=[1.1,2.3,3.9,5.1];
y=[3.887,4.276,4.651,2.117];%输入四个点
a=polyfit(x,y,length(x)-1)
%此函数的第三个参数代表多项式的阶数
poly2sym(a) %转为符号形式
运行结果:
a =
-0.2015 1.4385 -2.7477 5.4370
ans =
- (361*x^3)/1792 + (15467*x^2)/10752 - (3093646650838585*x)/1125899906842624 + 3060758582605503/562949953421312
原多项式y如下:
积分后的Y如下:
MATLAB求多项式的积分,格式如下:
q=polyint(p,k) %k代表k阶积分
当然,也可以自己构造函数进行积分。思路如下:
%调用格式为 py=poly_itg(p)
function py=poly_itg(p)
n=length(p); %p代表被积多项式的系数
py=[p.*[n:-1:1].^(-1),0] %py代表求积后多项式的系数
end %此种方法不包括最后一项积分常数
按多项式的方法求解以下积分:
解:
MATLAB代码如下:
clc;clear;
p=[3 0 -4 10 -25]; %创建一个向量来表示多项式
q=polyint(p); %也可以写成 q=polyint(p,1)
a=-1;
b=3;
I=diff(polyval(q,[a b])) %diff函数代表相减
运行结果:
I =49.0667
原多项式如下:
微分后的多项式,如下:
可以利用polyder()函数来求多项式的一阶导数的系数,c为多项式y的系数。MATLAB调用格式如下:
b=polyder(c)
上式子中b是微分后的系数,可以表示为如下:
多项式表示为如下:
多项式表示为如下:
由此,可自己定义两个多项式相加的函数poly_add(p1,p2),自定义如下:
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
由此,两个多项式相加的调用格式如下:
c=poly_add(a,b) %c为求和后的系数数组
两个多项式相减,调用格式如下:
c=poly_add(a,-b)
根据数学经验,m阶多项式与n阶多项式的乘积是m+n阶的多项式。
多项式表示为如下:
多项式表示为如下:
由此两个多项式的乘积可表示如下:
计算系数的MATLAB命令,如下:
c=conv(a,b)
多项式除多项式,满足如下式子:
上式子中,代表商,代表除法的余数。
由此,多项式和,可以由MATLAB命令得到,如下:
[q,r]=deconv(a,b)
计算多项式a与多项式b相乘的结果。
解:
MATLAB代码如下:
clc;clear;
a=[2 -5 6 -1 9];
b=[3 -90 -18];
c=conv(a,b); %相乘
poly2sym(c) %写成符号的形式
运行结果:
ans =6*x^6 - 195*x^5 + 432*x^4 - 453*x^3 + 9*x^2 - 792*x - 162