第二章MATLAB.docx
- 文档编号:8722724
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:15
- 大小:68.36KB
第二章MATLAB.docx
《第二章MATLAB.docx》由会员分享,可在线阅读,更多相关《第二章MATLAB.docx(15页珍藏版)》请在冰豆网上搜索。
第二章MATLAB
2MATLAB——一个强有力的科学计算与
控制系统CAD软件
2.1概述
MATLAB的名字由MATrix和LABoratory两词的前三个字母组合而成,始创者是时任美国新墨西哥大学计算机科学系主任的CleveMoler教授。
于1984年由MathWorks公司推出(DOS版)。
1993年推出MATLAB4.0(Windows版)。
1997年MATLAB5.0版问世。
1999年春已到了5.3版。
今天MATLAB已成为国际上最优秀的科技应用软件之一,其强大的科学计算与可视化功能、简单易用的开放式可推展环境以及多达30余个面向不同领域而扩展的工具箱(Toolbox)支持,使得MATLAB在许多学科领域在成为科学计算、计算机辅助设计与分析的基本工具和首选平台。
在国内外的许多大学中,MATLAB已成为自动控制,信号分析等课程和教科书的内容,成为许多学科攻读学位的大学生、硕士生、博士生的必须掌握的工具。
在国际学术界,MATLAB已被确认作为一个准确、可靠的科学计算软件而得到承认。
在许多国际一流的学术刊物上都可以看到MATLAB的应用,在研究单位和工业部门,MATLAB已成为一些分析统计软件的工作平台和主要支撑。
许多硬件、仪器都接受MATLAB的支持。
面向控制工程应用一直是MATLAB的主要功能之一,早期的版本就提供了控制系统设计工具箱(ControlToolbox)。
90年代初的3.5版推出RobustToolbox,4.0版推出基于模块图的控制系统仿真软件Simulink。
到目前为止,MATLAB5.x版本中包含的控制工程类工具箱已超过10个。
MATLAB所具备的强有力的计算功能和图形表现,以及各种工具箱提供的丰富的专用函数,为设计研究人员避免重复繁琐的计算和编程,更快、更好、更准确地进行控制系统分析和设计提供了极大的帮助。
本书的后叙章节中将结合控制系统理论与设计方法介绍几个控制类工具箱的应用。
本章中,我们将通过一些简单例子表现MATLAB的编程和功能。
2.2MATLAB基本功能及举例
本节中,我们通过一些简单例题来说明MATLAB的基本计算与绘图功能。
2.2.1矩阵运算
既然以MatrixLaboratory的缩写来命名,MATLAB无疑将在矩阵的表示和运算方面独具特色。
矩阵的MATLAB表示:
对于矩阵
,可以简单地表示为A=[123;456;789]
此外,a=[-1.3/7sqrt(4.5)2+3i]也表示一个矩阵。
在MATLAB中,可以方便地用C=[A;a]来构成一个新的矩阵。
也可以用
x=C(:
,2)等命令来提取一个矩阵的某一部分。
MATLAB的矩阵运算:
MATLAB在矩阵运算方面的优势则更是明显。
如,可以直接用C=A+B,D=A*B等计算式形式的命令来完成矩阵的四则运算。
如有AX=B则求解指令为X=A\B
XA=B则求解指令为X=B/A
矩阵转置:
B=A’
矩阵求逆:
B=inv(A)
行列式:
det(A)
此外,在矩阵求特征值,LU分解等诸多方面,MATLAB都提供了大量丰富的专用函数和指令,使得用户可以用计算公式的形式来解决Fortran、C等语言中须通过复杂编程来求解的问题。
读者可以通过运行本书提供的chp2_1.m程序来体会MATLAB中矩阵计算的一些基本方法。
%=======Programchp2_1=========
%--------BasiocModule--------
clcdisp('Matrixexpression')
disp('A=[123;456;789]:
')
A=[123;456;789]
disp('a=[-1.3/7sqrt(4.5)2+3i]:
')
a=[-1.3/7sqrt(4.5)2+3i]
disp('MatrixTurn:
')
B=A'
pause
clc
A=[123;456;789]
a=[-1.3/7sqrt(4.5)2+3i]
disp('C=[A;a]:
')
C=[A;a]
disp('x=C(:
2):
')
x=C(:
2)
pause
clc
A=[123;456;789]
disp('C=A+A:
')
C=A+A
disp('B=A*E(Eisan3x3Identitymatrix):
')
B=A*eye(3)
pause
clc
A=[123;321;125]
B=[-29-15;615-21;-611-2]
disp('Ax=B=====>x=A\B:
')
x=inv(A)*B
disp('thedeterminantofthesquarematrixxis')
det(x)
2.2.2多项式计算
MATLAB中以向量形式进行多项式的表示和计算。
如多项式x2+3x+2表示为x=[132]
4y3+2y2+6表示为y=[4206]
上述两个多项式的乘积,可以
z=conv(x,y)
求得为z=[41414101812]
表示相乘后的多项式为4x5+14x4+14x3+10x2+18x+12
相反,如欲求多项式的分解,则可用dconv指令。
如用y=deconv(z,x)求得。
y=[4206]
此外,还有:
求根,对多项式x2+3x+2=0
可用roots(x)求得
rootofx=-2
-1
反之,也有polynom=poly(rootofx)
=132
求函数值,可以polyval(x,5)求出x=5时,x2+3x+2的值。
如:
Pa=polyval(x,5)
得:
Pa=42
有关计算机程序参见chp2_2.m
%polyval-Evaluatepolynomial.%polyvalm-Evaluatepolynomialwithmatrixargument.%residue-Partial-fractionexpansion(residues).%polyfit-Fitpolynomialtodata.%polyder-Differentiatepolynomial.
%=========ProgramBM_2===========
%---------Polynomial------------
clc
disp('Polynomialexpression')
disp('')
disp('polynomialx^2+3x+2and4y^3+2y^2+6:
')
x=[132]
y=[4206]
disp('Multiplypolynomials-->z=conv(x,y):
')
z=conv(x,y)
disp('Dividepolynomials-->y=deconv(z,x):
')
y=deconv(z,x)
pause
clc
disp('')
disp('polynomialx^2+3x+2:
')
disp('')
disp('Findpolynomialroots-->roots(x):
')
rootofx=roots(x)
disp('Convertrootstopolynomial-->poly(roots):
')
polynom=poly(rootofx)
disp('Evaluatepolynomial-->Pa=polyval(x,a);a=5:
')
Pa=polyval(x,5)
disp('EndofBM_2')
2.2.3函数功能
MATLAB提供丰富的函数功能,基本函数例如下连几个表中。
表2.1三角函数表2.2基本函数
sin
正弦
abs
绝对值、模
cos
余弦
angle
相角
tan
正切
sqrt
平方根
asin
反正弦
real
实部
acos
反余弦
imag
虚部
atan
反正切
conj
复数共轭
sinh
双曲正弦
fix
向零取整
cosh
双曲余弦
floor
向负无穷取整
tanh
双曲正切
ceil
向正无穷取整
asinh
反双曲正弦
sign
根据符号取值函数
acosh
反双曲余弦
rem
求余数
a+anh
反双曲正切
exp
指数函数
log
自然对数
log10
常用对数
2.2.4图形处理
图形是人们通过视觉观察和分析数据间内在关系的一个重要途径,在MATLAB中,可以通过数据点、曲线、曲面、线型、色彩等诸多手段表现数据的性状,获得良好的数据和函数图形处理的基本机能和规律。
(1)二维绘图
二维绘图的最基本指令是plot,它是以一定的线型(线条或标记,颜色)把一组成对的数据表示在x-y坐标面上,其格式为:
plot(x,y,Line-type)
例2.1曲线绘制y1=sin(t),y2=cos(t),y3=e-(0.1+t)
程序chp2_3.m
%===========ProgramBM_P2===========
t=0:
0.05:
3*pi;
y1=sin(t);
y2=cos(t);
y3=exp(-(0.1+t));
plot(t,y1,'r',t,y2,'+g',t,y3,'b')
title('Myfirstplot')
xlabel('Numberofpointst')
ylabel('r:
sin(t)g:
cos(t)b:
exp(-0.1-t)')
grid
disp('EndofBM_P2')
执行结果如图2.1所示。
(2)三维绘图
三维绘图主要包括三维空间曲线,三维网线图和曲面图,基本格式为:
三维空间曲线plot(x,y,z.Line-type)
三维网线图Mesh(z);Mesh(x,y,z).
三维曲面图Surf(z);Surf(x,y,z).
例2.2用三维网线图、曲面图表示函数
(参见程序chp2_4.m)
%=========Programchp2_4.m===========
%准备数据
x=-8:
.5:
8;
y=x';
X=ones(size(y))*x;
Y=y*ones(size(x));
R=sqrt(X.^2+Y.^2)+eps;
Z=sin(R)./R;
figure
(1)
mesh(Z)%三维网线图
title('No.1mesh(z)')
pause
figure
(2)
surf(X,Y,Z)%曲面图
pause
figure(3)
contour(X,Y,Z,20)%等高线图(平面)
pause
figure(4)
contour3(X,Y,Z,20)%等高线图(空间)
pause
figure(5)
contourf(X,Y,Z,20)
图2.2三维网线图
曲面图和等高线图请自己运行程序演示。
2.2.5拟合与插值
拟合与插值是科学研究和工程技术中处理数据的常用手段,所谓拟合(fitting)是指寻找一条“平滑”的曲线最不失真地去表现带噪声的“测量数据”,其原理是线性最小二乘。
而插值(Interpolation)则是在认定所给“基准数据”完全正确的前提下,“平滑”地估算出“基准数据”点之间其它点应当具有的函数值,其数学基础是差分。
其中比较常用的样条插值,是设每两个相邻样本之间是一条三次多项式曲线,且整个样本区间上具有连续的一阶和二阶导数。
本节中以几个例题来说明曲线拟合与插值的MATLAB实现。
例2.3曲线拟合。
设已获得一组实验数据如表2.3
表2.3实验实测数据
x
0
1
2
3
4
5
y
0
1.1
4.1
5.3
9.8
19.9
可以用pf=polyfit(x,y,n),来获得拟合曲线。
其中,n是拟获得的多项式的阶数,而pf为所得多项式系数,运行程序chp2_5.m(程序中分别设n1=1,n2=2),执行结果于图2.3所示。
%========Programchp2_5.m=========
%---------Curvefitting-----------
clc
pause
disp('InputData--x;OutputData--y:
')
x=[0,1,2,3,4,5]
y=[0,1.1,4.1,5.3,9.8,19.9]
pause
%figure
plot(x,y,'or')
holdon
grid
pause
pf1=polyfit(x,y,1)
px1=polyval(pf1,x)
plot(x,px1,'g')
grid
%
pause
pf2=polyfit(x,y,2)
px2=polyval(pf2,x)
%plot(x,y,'o',x,px2,'b')
plot(x,px2,'b')
grid
holdoff
其n1=1时,拟合得一条直线。
且
pf1=[3.6229-2.3571]
即曲线方程式为
y1=3.6x-2.36。
n2=2时,拟合得一条二次曲线。
且
pf2=[0.9107-0.93070.6786],
即曲线方程式为
y2=0.91x2-0.93x+0.68
图2.3曲线拟合
例2.4一维插值,设有一组数据
x=0:
1:
9
y=[00.90.6100.1-0.3-0.7-0.9-0.2]
要求在上述十个样本点间,产生另外的估计点以达到数据更为平滑的效果(这种技术在信号处理和图像处理中常有应用)。
可以通过MATLAB中的指令y=interp1(xs,ys,x,method’)来完成。
上述指令中,interp1表示一维插值,相应interp2、interp3对应于二维和三维插值,此外还有interpft,interpn指令等。
xs,yx为已有样本数据时x,y为插值产生向量,method有包含4种,其中spline(样条插值)输出结果最平滑,上述问题的程序如下:
y=[00.90.610.1-0.3-0.7-0.9-0.2];
x=0:
length(y)-1;%x等距
x1=0:
0.1:
length(y)-1;%每两相邻点间插入9点。
y1=interp1(x,y,x1,spline);
plot(x,y,'+r',x1,y3,'b')
程序见chp2_6.m,程序执行结果如图2.4所示。
图2.4一维插值
例2.5假设有一组海底深度测量数据(本文中采用程序产生的随机数据),采用插值方式绘制更细致平滑的海底形状图。
(1)通过随机数据产生一组分度稀疏的“海底深度测量数据”
randn(state,2)
x=-5:
5;y=-5:
5;[x,y]=meshgrid(x,y),%产生“经纬”矩阵。
zz=1.2*exp(-((x-1)^2+(y-2).^2))-0-7*exp(-(x+2)^+(y+1)^2));
z=-500+zz+randn(size(x))*0.05
xurf(x,y,z);view(*-25,25)
得到据随机产生数据为基准数据绘制的曲面图
(图2.5(a))
(2)通过插值,画出更细致平滑的海底图
xi=linspace(-5.5,50);yi=linspace(-5,5,50);
[x1,y1]=meshgrid(xi,yi);
z1=interpz(x,y,z,x1,y1,*cubic’);
surf(x1,y1,z1),vies(-25,25);
得图2.5(b)
a、据基准数据绘制的曲面图b、由插值数据生成的曲面图
图2.5海底形状图
2.2.6常微分方程求解
在科学研究和工程技术中,许多问题常常在数学上以常微分方程(OrdinaryDifferentialEquations)表示。
这类问题往往没有或很难求得解析解,从而只得借助于数值求解。
常微分方程的求解可分为初值问题和边值问题两类。
后者的求解比前者更为困难,必须具体问题具体处理,而且其中相当一部分最后是转化为前者求解。
控制工程遇到的问题基本上全是初值问题。
MATLAB为常微分工程初值问题提供了一组配套齐全、结构严整的指令,称之为ODE解题器(Solver),可以在给定初始时间及条件下,通过数值方法计算每个程序步骤的解。
对于一个常微分方程,如y(n)=f(t,y,y‘,y‘’.....)。
MATLAB分以下三步来求解。
把高阶微分方程转化成一阶问题。
利用代换法,令:
y1=y;
y2=y’(2.2.6-1)
y3=y,,
:
:
yn=y(n-1)
从而把一个高阶微分方程转换成一个一阶微分方程组。
y1=y2;
y2=y3(2.2.6-2)
y
:
yn-1=yn
第二步应用能计算函数的M函数文件(MATLAB中称之为ODE文件)来描述式(2.2.6-2)。
例2.6建立y,,,+y,,+y,=0的ODE文件。
令y1=y,y2=y,,y3=y,,
则y,,,+y,,+y,=0等同于
于是,ODE文件为:
functionydot=dlfun(t,y);
ydot=[y
(2);y(3);-y(3)-y
(2)];
第三步应用解题器(solver)求解y的数值解。
solver的指令格式为:
[t,y]=solver(’F’,tspan,y0)
上式中,solver是ode45,ode23等具体指令的统称,如ode45表示用4-5阶Runge-kntta方法求解,具体详细说明请参见有关参考书或在线帮助说明。
F是描述常微分方程的ODE文件。
tspan=[totf]定义求数值解的时间区域y0为初始状态值,以向量形式表示。
例2.7用ode45求解例2.7的微分方程
程序为chp2_8.m
%=========Programchp2_8============
clear
y0=[10;1;0];
options=odeset('OutputFcn','odephas3','OutputSel',[123],'refine',20);
[t,y]=ode45('d1fun',[0120],y0,options);
xlabel('y
(1)')
ylabel('y
(2)')
zlabel('y(3)')
执行结果。
图2.6例2.7题计算结果
本节中仅对MATLAB的基本计算与图形功能做了一些简单的介绍,事实上,除了上述方面外,MATLAB在概率统计,代数方程、符号计算、数值求导等方面都具有很强的功能,此外,MATLAB不仅象C、FORTRAN那样具有流程控制(如for循环、switch语言)逻辑运算、子程序调用、文件处理等功能,而且具有与C、FORTRAN、汇编语言程序的良好的接口功能。
然而,考虑到一方面目前国内介绍MATLAB基本功能的书籍已有不少,读者不难找到参考书籍。
另一方面MATLAB程序的储多功能及指令与C、FORTRAN等有相似之处,程序本身亦具有良好的可读性,相信读者不难在实际应用过程中领会和掌握。
其三,也许是更重要的一点,是MATLAB自身拥有很强的帮助系统,可以以多种形式提供帮助和引导(见2.3节)。
因此,本书对MATLAB的基本功能仅做大概介绍。
2.3MATLAB的帮助系统
2.3.1帮助系统构成
MATLAB的帮助系统由以下几个部分构成。
(1)随MATLAB内建函数、M函数文件、目录而建立的在线帮助文件。
(2)HTML超文本形式的帮助文件。
(3)PDF形式的帮助文档。
(4)WWW站点所提供的技术支持。
2.3.2在线帮助
MATLAB的在线帮助文件自动随主包、工具包同时被安装、查阅简单、方便,对新老用户都有十分重要的作用,有以下几个方面。
(1)在线入门引导。
(intro)
MATLAB初学者,可以在MATLAB指令图中运行intro指令进入“SlideshowPlayer”学习MATLAB的入门操作。
(2)在线演示。
(demo)
MATLAB提供了一组精心设计的演示程序,其中包括对基本部分及各工具箱的指令及功能的说明与示范,对理解指令和指导编程有十分重要的作用。
可以通过运行指令demos,打开窗口“MATLABDemoWindow”,然后选择相应内容观看演示。
(3)在线帮助。
(help)
在线帮助help命令有三种应用形式。
1)help+指令名。
(如helpplot)将给出该指令的具体说明。
2)help,运行不带任何限定的help,将提供分类明细表,使用户了解
MATLAB中有哪些门类。
3)help+topics。
从分类明细表后得到具体子类名称(topics)后可进一步用help+topics了解该子类的操作指令一览表。
如用help命令后,可找到有关矩阵的门类为:
matlab\elmat_Elementarymatricesandmatrixmanipulation,然后,可用helpelmat指令再查换有关矩阵的指令。
________________________________________
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第二章 MATLAB 第二