MATLBA计算方法和应用141多项式.docx
《MATLBA计算方法和应用141多项式.docx》由会员分享,可在线阅读,更多相关《MATLBA计算方法和应用141多项式.docx(20页珍藏版)》请在冰豆网上搜索。
MATLBA计算方法和应用141多项式
多项式的运算
院系XX专业XX姓名XX
MATLAB多项式运算函数如表所示。
多项式运算函数
指令
功能
p=poly(r)
根据多项式的根形成系数向量
p=poly(A)
根据方阵形成系数向量
px=polyval(p,x)
计算多项式的值
r=roots(p)
根据系数向量求多项式的根
p=conv(p1,p2)
根据两个多项式的系数求乘积的多项式系数
[q,r]=deconv(p1,p2)
p1除以p2的商多项式系数q,余数多项式系数r
pd=polyder(p)
求多项式导数的系数
pd=polyder(p1,p2)
求多项式乘积的导数的系数
[n,d]=polyder(p1,p2)
p1除以p2的导数多项式的分子系数n和分母系数d
p=polyfit(x,y,n)
对向量x和y的n阶拟合多项式系数
[r,p,k]=residue(p1,p2)
p1/p2的多项式展开,r是残数,p是极点,k的直项
1.降幂多项式的形成之一
设多项式的根为r1,r2,…,rn,则用根表达的多项式为
P(x)=(x-r1)(x–r2)…(x-rn)
展开并将多项式按降幂排列
P(x)=a1xn+a2xn-1+…+anx+an+1
系数向量为
p=[a1,a2,…+an+an+1]
[程序]P14_1_1poly.m
%多项式的形成之一(请设置断点)
clear%清除变量
r=[1,2,3]%多项式的根
p=poly(r)%求多项式的系数
poly2str(p,'x')%显示多项式
rr=roots(p)%求多项式的根
symsx%定义符号变量
ys=(x-1)*(x-2)*(x-3)%用根表示的符号多项式
expand(ys)%展开多项式
xx=0:
0.1:
4;%自变量向量
y=polyval(p,xx);%多项式的值
ys=subs(ys,x,xx);%替换多项式的值
figure%创建图形窗口
plot(xx,y,xx,ys,'r.')%画曲线
gridon%加网格
fs=16;%字体大小
title('多项式曲线之一','fontsize',fs)%显示标题
xlabel('\itx','fontsize',fs)%x标签
ylabel('\ity','fontsize',fs)%y标签
legend('数值多项式的值','符号多项式的值',2)%图例
[结果]
r=
123
p=
1-611-6
ans=
x^3-6x^2+11x-6
rr=
3.0000
2.0000
1.0000
ys=
(x-1)*(x-2)*(x-3)
ans=
x^3-6*x^2+11*x-6
[图示]
2.降幂多项式的形成之二
设一方阵
则行列式表示的多项式为
将根表达式和行列表达式展开为降幂多项式。
[程序]P14_1_2poly.m
%多项式的形成之二(请设置断点)
clear%清除变量
n=3;%方阵阶数
%A=pascal(n)%帕斯卡矩阵
A=magic(n)%魔方
p=poly(A)%方阵的特征多项式的系数
poly2str(p,'x')%显示多项式
symsx%定义符号变量
X=diag(repmat(x,n,1))%对角矩阵
P=X-A%矩阵表达式
ys=det(P)%求行列式的值形成符号多项式
xx=-5:
0.1:
15;%自变量向量
y=polyval(p,xx);%多项式的值
ys=subs(ys,x,xx);%替换多项式的值
figure%创建图形窗口
plot(xx,y,xx,ys,'r.')%画曲线
gridon%加网格
fs=16;%字体大小
title('多项式曲线之二','fontsize',fs)%显示标题
xlabel('\itx','fontsize',fs)%x标签
ylabel('\ity','fontsize',fs)%y标签
legend('数值多项式的值','符号多项式的值')%图例
[结果]
A=
816
357
492
p=
1.0000-15.0000-24.0000360.0000
ans=
x^3-15x^2-24x+360
X=
[x,0,0]
[0,x,0]
[0,0,x]
P=
[x-8,-1,-6]
[-3,x-5,-7]
[-4,-9,x-2]
ys=
x^3-15*x^2-24*x+360
[图片]
3.多项式的乘积
设第1个多项式的根为r11,r12,…,r1n,则用根表达的多项式为
P1(x)=(x-r11)(x–r12)…(x-r1n)
设第1个多项式的根为r21,r22,…,r2m,则用根表达的多项式为
P2(x)=(x–r21)(x–r22)…(x–r2m)
则两个多项式的乘积为
P(x)=P1(x)P2(x)=(x-r11)(x–r12)…(x-r1n)(x–r21)(x–r22)…(x–r2m)
[程序]P14_1_3conv.m
%多项式的乘积(请设置断点)
clear%清除变量
r1=[1,-2,3]%第1个多项式的根
r2=[2,4]%第2个多项式的根
p1=poly(r1)%第1个多项式的系数
p2=poly(r2)%第2个多项式的系数
p=conv(p1,p2)%两个多项式乘积的系数
r=roots(p)%多项式的根
xx=-2:
0.1:
4;%自变量向量
y1=polyval(p1,xx);%第1个多项式的值
y2=polyval(p2,xx);%第2个多项式的值
y=polyval(p,xx);%两个多项式乘积的值
figure%创建图形窗口
plot(xx,y1,xx,y2,xx,y)%画三条曲线
legend('\ity\rm_1','\ity\rm_2','\ity')%图例
gridon%加网格
fs=16;%字体大小
title('多项式的乘积','fontsize',fs)%显示标题
xlabel('\itx','fontsize',fs)%x标签
ylabel('\ity','fontsize',fs)%y标签
symsx%定义符号变量
y1=(x-1)*(x+2)*(x-3)%用根表示的第1个符号多项式
y2=(x-2)*(x-4)%用根表示的第2个符号多项式
y=y1*y2%两个多项式的乘积
expand(y)%展开多项式
y1=subs(y1,x,xx);%符号替换成数值
y2=subs(y2,x,xx);%符号替换成数值
y=subs(y,x,xx);%符号替换成数值
holdon%保持图像
plot(xx,y1,'.',xx,y2,'.',xx,y,'.')%画点
[结果]
r1=
1-23
r2=
24
p1=
1-2-56
p2=
1-68
p=
1-81520-7648
r=
-2.0000
4.0000
3.0000
2.0000
1.0000
y1=
(x-1)*(x+2)*(x-3)
y2=
(x-2)*(x-4)
y=
(x-1)*(x+2)*(x-3)*(x-2)*(x-4)
ans=
x^5-8*x^4+15*x^3+20*x^2-76*x+48
[图示]
4.多项式的商和余项
两个多项式相除可得
其中Q(x)是商多项式,R(x)余项多项式,R(x)的阶数小于P2(x)的阶数。
商和余项的系数分别为
q=[q1,q2,…+qs],r=[r1,r2,…+rt]
[程序]P14_1_4deconv.m
%多项式的商(请设置断点)
clear%清除变量
r1=[1,-2,3]%第1个多项式的根
r2=[2,4]%第2个多项式的根
p1=poly(r1)%第1个多项式的系数
poly2str(p1,'x')%显示多项式
p2=poly(r2)%第2个多项式的系数
poly2str(p2,'x')%显示多项式
[q,r]=deconv(p1,p2)%两个多项式商的系数和余项的系数
poly2str(r,'x')%显示多项式
poly2str(q,'x')%显示多项式
xx=-2:
0.1:
4;%自变量向量
y1=polyval(p1,xx);%第1个多项式的值
y2=polyval(p2,xx);%第2个多项式的值
yq=polyval(q,xx);%两个多项式商的值
yr=polyval(r,xx);%两个多项式余项的值
yy1=y2.*yq+yr;
figure%创建图形窗口
plot(xx,y1,xx,y2,xx,yq,xx,yr,xx,yy1,'.')%画曲线
legend('\ity\rm_1','\ity\rm_2','\itq','\itr')%图例
gridon%加网格
fs=16;%字体大小
title('多项式的商和余项','fontsize',fs)%显示标题
xlabel('\itx','fontsize',fs)%x标签
ylabel('\ity','fontsize',fs)%y标签
[结果]
r1=
1-23
r2=
24
p1=
1-2-56
ans=
x^3-2x^2-5x+6
p2=
1-68
ans=
x^2-6x+8
q=
14
r=
0011-26
ans=
11x-26
ans=
x+4
[图示]
5.多项式的导数
多项式的导数为
dP/dx=na1xn-1+(n-1)a2xn-2+…+an
系数向量为
p=[na1,n-1)a2,…+an]
[程序]P14_1_5polyder.m
%多项式的导数(请设置断点)
clear%清除变量
r=[1,2,3]%多项式的根
p=poly(r)%求多项式的系数
pd=polyder(p)%求多项式的导数
poly2str(pd,'x')%显示多项式
rr=roots(pd)%求多项式的根
symsx%定义符号变量
ys=(x-1)*(x-2)*(x-3)%用根表示的符号多项式
ysd=diff(ys)%求多项式的符号导数
expand(ys)%展开多项式
xx=0:
0.1:
4;%自变量向量
yd=polyval(pd,xx);%多项式的值
ysd=subs(ysd,x,xx);%替换多项式的值
figure%创建图形窗口
plot(xx,yd,xx,ysd,'r.')%画曲线
gridon%加网格
fs=16;%字体大小
title('多项式的导数','fontsize',fs)%显示标题
xlabel('\itx','fontsize',fs)%x标签
ylabel('\ity','fontsize',fs)%y标签
legend('数值多项式的导数','符号多项式的导数')%图例
[结果]
r=
123
p=
1-611-6
pd=
3-1211
ans=
3x^2-12x+11
rr=
2.5774
1.4226
ys=
(x-1)*(x-2)*(x-3)
ysd=
(x-2)*(x-3)+(x-1)*(x-3)+(x-1)*(x-2)
ans=
x^3-6*x^2+11*x-6
[图片]
6.多项式乘积的导数
多项式乘积的导数为
dP/dx=(dP1/dx)P2+(dP2/dx)P1
[程序]P14_1_6polyder.m
%多项式乘积的导数(请设置断点)
clear%清除变量
r1=[1,-2,3]%第1个多项式的根
r2=[2,4]%第2个多项式的根
p1=poly(r1)%第1个多项式的系数
p2=poly(r2)%第2个多项式的系数
pd=polyder(p1,p2)%两个多项式乘积导数的系数
r=roots(pd)%多项式的根
xx=-2:
0.1:
4;%自变量向量
dfy=polyval(pd,xx);%两个多项式乘积导数的值
symsx%定义符号变量
y1=(x-1)*(x+2)*(x-3)%用根表示的第1个符号多项式
y2=(x-2)*(x-4)%用根表示的第2个符号多项式
ys=y1*y2%两个多项式的乘积
expand(ys)%展开多项式
dys=diff(ys)
dy=subs(dys,x,xx);%符号替换成数值
figure%创建图形窗口
plot(xx,dfy,xx,dy,'.')%画曲线
gridon%加网格
fs=16;%字体大小
title('多项式乘积的导数','fontsize',fs)%显示标题
xlabel('\itx','fontsize',fs)%x标签
ylabel('d\ity\rmd/\itx','fontsize',fs)%y标签
legend('数值多项式乘积的导数','符号多项式乘积的导数')%图例
[结果]
r1=
1-23
r2=
24
p1=
1-2-56
p2=
1-68
pd=
5-324540-76
r=
3.6353
-1.1725
2.5248
1.4124
y1=
(x-1)*(x+2)*(x-3)
y2=
(x-2)*(x-4)
ys=
(x-1)*(x+2)*(x-3)*(x-2)*(x-4)
ans=
x^5-8*x^4+15*x^3+20*x^2-76*x+48
dys=
(x+2)*(x-3)*(x-2)*(x-4)+(x-1)*(x-3)*(x-2)*(x-4)+(x-1)*(x+2)*(x-2)*(x-4)+(x-1)*(x+2)*(x-3)*(x-4)+(x-1)*(x+2)*(x-3)*(x-2)
[图片]
7.多项式商的导数
多项式商的导数为
[程序]P14_1_7polyder.m
%多项式商的导数(请设置断点)
clear%清除变量
r1=[1,-2,3]%第1个多项式的根
r2=[2,4]%第2个多项式的根
p1=poly(r1)%第1个多项式的系数
p2=poly(r2)%第2个多项式的系数
[n,d]=polyder(p1,p2)%两个多项式商导数的系数
%r=roots(pd)%多项式的根
xx=-2:
0.1:
4;%自变量向量
yn=polyval(n,xx);%两个多项式商导数分子的值
yd=polyval(d,xx);%两个多项式商导数分母的值
symsx%定义符号变量
y1=(x-1)*(x+2)*(x-3)%用根表示的第1个符号多项式
y2=(x-2)*(x-4)%用根表示的第2个符号多项式
ys=y1/y2%两个多项式的商
expand(ys)%展开多项式
dys=diff(ys)%求符号导数
dy=subs(dys,x,xx);%符号替换成数值
figure%创建图形窗口
plot(xx,yn./yd,xx,dy,'.')%画曲线
gridon%加网格
fs=16;%字体大小
title('多项式商的导数','fontsize',fs)%显示标题
xlabel('\itx','fontsize',fs)%x标签
ylabel('d\ity\rmd/\itx','fontsize',fs)%y标签
legend('数值多项式商的导数','符号多项式商的导数',3)%图例
axis([-2,4,-50,5])%坐标范围
[结果]
r1=
1-23
r2=
24
p1=
1-2-56
p2=
1-68
n=
1-1241-44-4
d=
1-1252-9664
y1=
(x-1)*(x+2)*(x-3)
y2=
(x-2)*(x-4)
ys=
(x-1)*(x+2)*(x-3)/(x-2)/(x-4)
ans=
1/(x-2)/(x-4)*x^3-2/(x-2)/(x-4)*x^2-5/(x-2)/(x-4)*x+6/(x-2)/(x-4)
dys=
(x+2)*(x-3)/(x-2)/(x-4)+(x-1)*(x-3)/(x-2)/(x-4)+(x-1)*(x+2)/(x-2)/(x-4)-(x-1)*(x+2)*(x-3)/(x-2)^2/(x-4)-(x-1)*(x+2)*(x-3)/(x-2)/(x-4)^2
[图片]
7.多项式的拟合
[程序]P14_1_8polyfit.m
%多项式拟合(请设置断点)
clear%清除变量
x=linspace(0,2*pi);%自变量向量
y=sin(x);%正弦函数
figure%创建图形窗口
plot(x,y)%画正弦曲线
holdon%保持图像
cc='bgrcmyk';%颜色字符
n=length(cc);%字符个数
fori=1:
n%按字符循环
p=polyfit(x,y,i);%拟合多项式系数
yv=polyval(p,x);%多项式的值
plot(x,yv,['.',cc(i)])%画拟合曲线
end%结束循环
legend(char('sin\itx',num2str((1:
n)')))%图例
gridon%加网格
fs=16;%字体大小
title('正弦函数的多项式拟合','fontsize',fs)%显示标题
xlabel('\itx','fontsize',fs)%x标签
ylabel('\ity','fontsize',fs)%y标签
[图片]