-
1 文档
-
2 视频
-
3 PPT
多项式理论及其计算在很多学科的计算中有着重要的应用,Matlab提供了多项式的多种运算。
多项式表示

>>p=[1 2 0 3 -10]; %必须包括零系数项
2. 多项式的基本运算
(1)多项式的加减运算是将表示它的向量进行加减运算,注意多项式的维度必须相同。多项式的乘法运算可以调用conv函数进行。多项式运算举例如下:
>> a=[1 2 3];
>> b=[1 4 5];
>> d=a+b
d =
2 6 8
>> w=conv(a,b)
w =
1 6 16 22 15
![]()
(2)多项式相除运算应用deconv函数进行。其格式如下:
[q,r]=deconv(w,b)
说明:q表示w除以b的商式,r表示余式。接上例:
>> [q,r]=deconv(w,b) %整除,余式等于零
q =
1 2 3
r =
0 0 0 0 0
>>c=[1 2] ;[q,r]=deconv(w,c)
q =
1 4 8 6
r =
0 0 0 0 3
![]()
(3)多项求导函数应用polyder函数实现。结果仍然是多项式。导函数polyder格式如下:
polyder(p)
polyder(u,v)
[q,d]=polyder(u,v)
说明:当输入参数为u,v,函数输出变量只有一个时,表示计算u、v乘积的导数;输出变量为[q,d]时,表示计算u/v的导数,q为分子多项式系数,d为分母多项式系数。
![]()
>> w=[1 6 20 50];
>> y1=polyder(w)
ans =
3 12 20
>> a=[1 2 3]; b=[1 4 5]; y2=polyder(a,b)
ans =
4 18 32 22

>>a=[1 2 3]; b=[1 4 5];
>> [q,d]=polyder(a,b)
q =
2 4 -2
d =
1 8 26 40 25

>> p=[ 1 -8 19 -12];
>> r=roots(p)'
r =
4.0000 3.0000 1.0000
>> poly(r) %验证结果。
ans =
1.0000 -8.0000 19.0000 -12.0000
poly函数还有求矩阵特征多项式系数的功能。
3. 多项式求值
多项式求值应用函数polyval与polyvalm实现。其格式如下:
y=polyval(p,x)
y=polyvalm(p,x)
说明:前者计算x数组元素代入多项式p的结果。后者是x以矩阵为单位代入多项式p的结果。

>> p=[1 2 3];
>> polyval(p,[1:3;4:6;7:9])
ans =
6 11 18
27 38 51
66 83 102

>> polyvalm(p,[1:3;4:6;7:9])
ans =
35 40 48
74 94 108
116 142 171
其结果等于x*x+2*x+3的结果。
在大量的数据处理中,数据的函数拟合与插值是一项很重要的工作。Matlab提供了多项式拟合与插值在工程计算与科学研究中都有广泛的应用。
1. 多项式拟合

取得最小值,称
为多项式拟合函数,显然多项式拟合的数学原理是求解超定方程组的最小二乘法。残差平方和为
。Matlab提供了polyfit函数求多项式拟合曲线。
[例4-11] 某种铝合金的含铝量为x%,其熔解温度为y,测量数据见表,求其拟合多项式。
| 含铝量 | 36.9 | 46.7 | 63.7 | 77.8 | 84.0 | 87.5 |
| 熔解温度 | 181 | 197 | 235 | 270 | 283 | 292 |
程序如下:
x=[36.9 46.7 63.7 77.8 84 87.5];
y=[181 197 235 270 283 292];
p1=polyfit(x,y,1);
x1=linspace(35,90,100);
y1=polyval(p1,x1);
plot(x,y,'o',x1,y1,'b');
legend('原始数据', '1阶多项式');

图4-2多项式拟合曲线
2.多项式插值
多项式拟合问题是研究如何寻找平滑的曲线能够很好地拟合那些给定的数据点,并不要求拟合曲线都要经过这些数据点,而插值则是在认定所给数据点是完全正确的情况下,利用这些给定的数据点,根据各种插值多项式估算新的数据点。
(1)一维多项式插值函数
下面介绍一维多项式插值函数interp1。格式如下:
yi=interp1(x,y,xi,'method')
说明:其中x,y是已知数据点的坐标,xi表示需要插值数据点组成的向量,yi表示根据插值算法求得的与xi对应的数据值,method指所采用的插值算法,包括最邻近插值法(nearest)、线性插值(linear)、三次样条插值(spline)、分段三次埃尔米特插值(pchip)。表4-1列出了各种插值算法的特点与适用情况。
表4-1 interp1的插值算法
| method | 含义 | 特点与适用情况 |
| linear | 线性插值 | 仅用作连接图上的数据点,速度较快,有足够精度,最常用,作为缺省设置 |
| nearest | 最邻近插值法 | 速度最快,占用内存最少,精度最低;实时使用,特大数据量处理,需要保持数据而不增加新函数值的特殊场合 |
| spline | 三次样条插值 | 速度慢,精度最高,最平滑,常作为平滑使用 |
| pchip | 分段三次埃尔米特插值 | 速度慢,精度高,平滑性好,常作为平滑使用,可保持数据形状 |
[例4-12]已知十组数据见表所示,求0-9之间插值,并绘图输出。
|
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|
| 0 | 1.8 | 2.1 | 0.9 | 0.2 | -0.5 | -0.2 | -1.7 | -0.9 | -0.3 |
程序如下:
x=0:9;
y=[0,1.8,2.1,0.9,0.2,-0.5,-0.2,-1.7,-0.9,-0.3];
x1=5;
temp=interp1(x,y,x1,'spline');
disp('x=5点的插值');
disp(temp);
x1=0:0.01:9;
y1=interp1(x,y,x1,'nearest'); %最邻近插值法
y2=interp1(x,y,x1,'linear'); %线性插值(linear)
y3=interp1(x,y,x1,'spline'); %三次样条插值(spline)
y4=interp1(x,y,x1,'pchip'); %分段三次埃尔米特插值
plot(x,y,'ok',x1,y1,'-r',x1,y2,'-.b',x1,y3,':c',x1,y4,'--k');
运行程序,x=5点的插值结果为-0.5000,准确等于已知数据表中值。0-9之间插值绘图结果如图4-3所示。

图4-3 多项式插值
[例4-13] 已知数据如下表,对所给数据进行插值,并画出它们在
区间上的插值函数曲线。
|
| -1 | -0.96 | -0.65 | 0.1 | 0.4 | 1.0 |
|
| -1 | -0.1512 | 0.386 | 0.4802 | 0.8838 | 1 |
程序如下:
x=[-1 -0.96 -0.65 0.1 0.4 1];
y=[-1 -0.1512 0.386 0.4802 0.8838 1];
x1=-1:0.01:1;
y1=interp1(x,y,x1,'linear'); %线性插值
y2=interp1(x,y,x1,'spline'); %三次样条
y3=interp1(x,y,x1,'pchip'); %插值
plot(x,y,'ok',x1,y1,':g',x1,y2,'-.b',x1,y3,'r');
legend('原始数据', '线性插值','三次样条','分段三次埃尔米特插值');

图4-4 多项式插值
(2)二维插值函数
二维数据插值基于同一维函数插值一样的基本思想,它是对两个变量的函数进行插值,二维插值主要用于图像处理与数据的可视化。该函数的格式为
zi=interp2(x,y,z,xi,yi,’method’)
说明:其中x,y,z是已知数据点,x、y是独立的,维数相同,z为矩阵,xi,yi分别表示需要插值数据点横坐标、纵坐标的组成向量,zi表示根据插值算法求得的与xi,yi对应的数据值,method指所采用的插值算法,包括线性插值'linear',最邻近插值法 'nearest',立方插值'cubic',缺少设置为线性插值。
[例4-14] 对由函数peaks产生的三维高斯分布进行二维插值
[x,y]=meshgrid(-4:1:4);
z=peaks(x,y);
subplot(2,2,1),surf(x,y,z);
title('原始数据图形');
[x1,y1]=meshgrid(-4:0.1:4);
z1=interp2(x,y,z,x1,y1,'nearest');
subplot(2,2,2),surf(x1,y1,z1);
title('最邻近插值');
z2=interp2(x,y,z,x1,y1,'linear');
subplot(2,2,3),surf(x1,y1,z2) ;
title('线性插值');
z3=interp2(x,y,z,x1,y1,'cubic');
subplot(2,2,4),surf(x1,y1,z3);
title('立方插值');

图4-5二维插值

