数学建模是用数学方法解决各种实际问题的桥梁,它已经渗透到各个领域,而且发挥出越来越重要的作用。面对自然科学和工程应用中的难题,大部分人无从入手,而个别人却能短时间内给出切实可行的解决方案,其差别往往在于驾驭数学知识的能力不同。现代计算机技术的应用不仅减少了计算错误,而且加强了数学应用者解决问题的能力。MATLAB是一款常用的数据处理软件,为了更好的应用MATLAB软件,我将整理好的MATLAB函数分享到今日头条上,以利己利人查阅。
本文详细介绍了MATLAB中的多项式与插值函数,涉及:多项式表式、多项式求根、特征多项式、多项式计算、卷积和去卷积运算、多项式求导、多项式曲线拟合、一维和二维插值函数。
1、多项式表示
在MATLAB中,多项式可用行矢量表示,其元素按幂指数降序排列,例如:
p(x)=x3-2x-5
可表示成
p=[1 0 -2 -5];
2、多项式的根
为求得多项式的根,即p(x)=0的解,可利用roots函数
p=[1 0 -2 -5];
r=roots(p)
r = 2.0946 -1.0473 + 1.1359i -1.0473 - 1.1359i
利用poly函数可从多项式的根中恢复出多项式
p2=poly(r)
p2 = 1.0000 0 -2.0000 -5.0000
3、特征多项式
poly函数还可以用于计算矩阵的特征多项式系数
A=[ 1 2 -1;3 4 5; -1 9 2];
poly(A)
ans = 1.0000 -7.0000 -38.0000 90.0000
4、多项式计算
polyval函数可计算出多项式在指定点处的值,例如:
y1=polyval(p,4)
y1 = 51
5、卷积和去卷积
多项式的乘和除对应于卷积和去卷积操作,这可由函数conv和deconv实现。例如,a(s)=s2+2s+3,b(s)=4s2+5s+6,则求c(s)=a(s)*b(s)时可输入
a=[1 2 3];
b=[4 5 6];
c=conv(a,b)
c = 4 13 28 27 18
通过多项式除法,可以得到c(s)/b(s)=q(s)+r(s)/b(s),这可由deconv函数求出
[q,r]=deconv(c, b)
q = 1 2 3
r = 0 0 0 0 0
6、多项式求导
polyder函数可用于求出单个多项式的导数,也可用于求两个多项式之积或之比的导数,这可由下列示例说明:
p=[1 0 -2 -5];
q=polyder(p)
q = 3 0 -2
a=[1 3 5];b=[2 4 6];
c=polyder(a,b)
c = 8 30 56 38
[q,r]=polyder(a,b)
q = -2 -8 -2
r = 4 16 40 48 36
最后求出了q(s)/r(s)为a(s)/b(s)的导数。
7、多项式曲线拟合
polyfit函数可在最小二乘意义下找出一多项式来拟合给定的一组数据。其调用格式为
p=polyfit(x,y,n)
其中,x, y为给定的数据,n为多项式阶次。例如,用三阶多项式来拟合下列数据:
x=[1 2 3 4 5];
y=[5.5 43.1 128 290.7 498.4];
p=polyfit(x,y,3);
x2=1:.1:5;
y2=polyval(p,x2);
figure(1)
plot(x,y,'o',x2,y2)
grid on
title('多项式曲线拟合')
8、一维内插
1)多项式内插
interpl函数可完成一维内插,其调用格式为
yi=interp1(x, y, xi, method)
其中,x,y为给定的数据对,xi为要内插的点矢量,method用于指定内插方法,可取
● ?nearest (最邻近内插):将内插点设置成最接近于已有数据点的值。
● ?1inear (线性内插):连接已有数据点作线性逼近。这是interpl函数的缺省设置。
● ?spline (三次样条内插):利用一系列样条函数获得内插数据点,从而确定已有数据点之间的函数。
● ?cubic(三次曲线内插):通过y拟合三次曲线函数,从而确定内插点的值。
以上这四种方法都要求x中的数据为单调,每种方法不要求x为均匀间隔,但如果x已经为均匀间隔,则在method之前加上*,可使执行速度加快。
这四种方法对执行速度、内存要求及得到的平滑度是不同的。总的说来,按nearest、linear、cubic、spline顺序,内存要求从小到大,执行速度由快到慢,平滑度由差到好。
2)基于FFT的内插
interpft完成基于FFT的一维内插,其调用格式为
y=interpft(x, n)
其中,x中包含等间隔取样的周期函数值,n为要求得到的点数。
9、二维内插
interp2函数用于完成二维内插,其调用格式为
Z1=interp2(X, Y, Z, XI, YI, method)
其中,method用于指定内插方法,可取nearest (最邻近内插)、bilinear (双线性内插)、spline (三次样条内插)、bicubic(二维三次曲线内插)。
为说明各种内插方法的效果,先产生一个7×7的数据矩阵,然后采用这三种方法进行内插,最后比较得到的结果。
% 产生低分辨率峰值函数
[x,y]=meshgrid(-3:1:3);
z=peaks(x,y);
% 定义内插点
[xi,yi]=meshgrid(-3:.25:3);
% %利用三种方法进行内插
zi1=interp2(x,y,z,xi,yi,'nearest');
zi2=interp2(x,y,z,xi,yi,'bilinear');
zi3=interp2(x,y,z,xi,yi,'bicubic');
% 绘出曲面图进行比较
figure(1)
subplot(2,2,1)
surf(x,y,z),title('原始数据曲线')
subplot(2,2,2)
surf(xi,yi,zi1),title('最邻近内插')
subplot(2,2,3)
surf(xi,yi,zi2),title('双线性内插')
subplot(2,2,4)
surf(xi,yi,zi3),title('二维三次曲线内插')
% 绘制轮廓图进行比较
figure(2)
subplot(2,2,1)
contour(x,y,z),title('原始数据曲线')
subplot(2,2,2)
contour(xi,yi,zi1),title('最邻近内插')
subplot(2,2,3)
contour(xi,yi,zi2),title('双线性内插')
subplot(2,2,4)
contour(xi,yi,zi3),title('二维三次曲线内插')
各位读者朋友,感谢您的阅读,您若对工程应用中的数学问题感兴趣,欢迎关注我,愿我们一起讨论和成长!!!