MATLAB第四部分多项式计算
第4章MATLAB多项式计算
4.1 多项式
4.1.1 多项式的表⽰
Matlab中⽤按降幂排列的多项式系数组成的⾏向量表⽰多项式,
如:p(x)=x^3-2x-5 被表⽰为:
p = [1 0 –2 –5];
1.多项式的加减运算
2.多项式乘法运算
函数conv(P1,P2)⽤于求多项式P1和P2的乘积。这⾥,P1、P2是两个多项式系数向量。
例4-1 求多项式x4+8x3-10与多项式2x2-x+3的
乘积。
3.多项式除法
函数[Q,r]=deconv(P1,P2)⽤于对多项式P1和P2作除法运算。其中Q返回多项式P1除以P2的商式,r 返回P1除以P2的余式。这⾥,Q和r仍是多项式系数向量。
deconv是conv的逆函数,即有P1=conv(P2,Q)+r。
例4-2 求多项式x4+8x3-10除以多项式2x2-x+3的结果。
4.1.2 多项式的导数
对多项式求导数的函数是:
p=polyder(A):求多项式A的导函数
p=polyder(A,B):求A与B积的导函数
[p,q]=polyder(A,B):求A/B的导函数,导函数的分
⼦存⼊p,分母存⼊q。
上述函数中,参数A,B是多项式的向量表⽰,结果p,q也是多项式的向量表⽰。
例4-3 求有理分式的导数。命令如下:
P=[1];
Q=[1,0,5];
[p,q]=polyder(P,Q)
4.1.3 多项式的求值
两种求多项式值的函数:
polyval(P,x)
polyvalm(P,x)
两者的区别在于前者是代数多项式求值,⽽后者是矩阵多项式求值。
1.代数多项式求值
polyval函数⽤来求代数多项式的值,其调⽤格式为:Y=polyval(P,x)
若x为⼀数值,则求多项式在该点的值;若x为向量或矩阵,则对向量或矩阵中的每个元素求其多项式的值。
例4-4 已知多项式x4+8x3-10,分别取x=1.2和⼀个2×3矩阵为⾃变量计算该多项式的值。
2.矩阵多项式求值
polyvalm函数要求x为⽅阵,它以⽅阵为⾃变量求多项式的值。设A为⽅阵,P代表多项式x3-5x2+8,那么
polyvalm(P,A)的含义是:
A*A*A-5*A*A+8*eye(size(A))
⽽polyval(P,A)的含义是:
A.*A.*A-5*A.*A+8*ones(size(A))
例4-5 仍以多项式x4+8x3-10为例,取⼀个2×2矩阵为⾃变量分别⽤polyval和polyvalm计算该多项式的
值。
matlab求导4.1.4 多项式求根
n次多项式具有n个根,当然这些根可能是实根,也可能含有若⼲对共轭复根。MATLAB提供的roots函数⽤于求多项式的全部根,其调⽤格式为:x=roots(P)
其中P为多项式的系数向量,求得的根赋给向量x,即x(1),x(2),…,x(n)分别代表多项式的n个根。
注意:根被储存为列向量
例4-6 求多项式x4+8x3-10的根。
命令如下:
A=[1,8,0,0,-10];
x=roots(A)
若已知多项式的全部根,则可以⽤poly函数建⽴起该多项式,其调⽤格式为:
P=poly(x)
若x为具有n个元素的向量,则poly(x)建⽴以x为其根的多项式,且将该多项式的系数赋给向量P。
例4-7 已知f(x)
(1) 计算f(x)=0 的全部根。
(2) 由⽅程f(x)=0的根构造⼀个多项式g(x),并与f(x)进⾏对⽐。
命令如下:
P=[3,0,4,-5,-7.2,5];
X=roots(P) %求⽅程f(x)=0的根
G=poly(X) %求多项式g(x)
4.1.5 多项式拟合
p=polyfit(x,y,n):⽤最⼩⼆乘法对已知数据x,y进⾏拟合,以求得n阶多项式的系数向量;
[p,s]=polyfit(x,y,n):p为返回的拟合后的多项式的系数向量,s为使⽤函数polyval获得的错误预估计值。
例4-8
x=linspace(0,2*pi,100); y=sin(x);
t=polyfit(x,y,6);
y1=polyval(t,x);
plot(x,y,'ro',x,y1,'b-')
4.2 数据插值
4.2.1 ⼀维数据插值
在MATLAB中,实现这些插值的函数是interp1,其调⽤格式为:Y1=interp1(X,Y,X1,'method')
函数根据X,Y的值,计算函数在X1处的值。X,Y是两个等长的已知向量,分别描述采样点和样本值,X1是⼀个向量或标量,描述欲插值的点,Y1是⼀个与X1等长的插值结果。
method是插值⽅法,允许的取值有
A 、nearest 寻最近数据点,由其得出函数值;
B、linear 线性插值(该函数的默认⽅法);
C、spline 样条插值,数据点处光滑--左导等于右导;
D、cubic 三次插值
例4-9 某观测站测得某⽇4:00时⾄18:00时之间每隔2⼩时的室内外温度(℃),⽤3次样条插值分别求得该⽇室内外4:30⾄17:30时之间每隔2⼩时各点的近似温度(℃)。
设时间变量h为⼀⾏向量,温度变量t为⼀个两列矩阵,其中第⼀列存放室内温度,第⼆列储存室外温度。命令如下:
h =4:2:18;
t=[18,20,22,25,30,28,24,28; 17,18,19,24,27,23,23,25]’;
XI =4.5:2:17.5
YI=interp1(h,t,XI,‘spline’) %⽤3次样条插值计算
4.2.2 ⼆维数据插值
在MATLAB中,提供了解决⼆维插值问题的函数
interp2,其调⽤格式为:
Z1=interp2(X,Y,Z,X1,Y1,'method')
其中X,Y是两个向量,分别描述两个参数的采样点,Z
是与参数采样点对应的函数值,X1,Y1是两个向量或标量,
描述欲插值的点。Z1是根据相应的插值⽅法得到的插值结果。
A、nearest 寻最近数据点,由其得出函数值;
B、linear ⼆维线性插值
C、cubic ⼆维三次插值
例4-10 某实验对⼀根长10⽶的钢轨进⾏热源的温度传播测试。⽤x表⽰测量点0:2.5:10(⽶),⽤h表⽰测量时间0:30:60(秒),⽤T表⽰测试所得各点的温度(℃)。试⽤线性插值求出在⼀分钟内每隔20秒、钢轨每隔1⽶处的温度TI。
命令如下:
x=0:2.5:10;
h=[0:30:60]';
T=[95,14,0,0,0;88,48,32,12,4;47,44,54,48,41];
xi=[0:10];
hi=[0:20:40]';
TI=interp2(x,h,T,xi,hi)