版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
11.4.MATLAB环境MATLAB既是一种算法语言,又是一个编程环境,更是一个开发系统。(1)工作空间(窗口)(变量浏览器)链接工作空间:指运行MATLAB的所有变量和常量构成的空间,是一个抽象的概念。①每打开一次,MATLAB自动建立一个工作空间。②MATLAB运行期间一直存在,关闭后自动消失。③刚打开的工作空间里只有几个常量。变量在运行程序时加到空间中。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.12④变量会在MATLAB关闭前一直存在,除非用命令删除。⑤可以随时查看工作空间中的变量。⑥一个程序的运行结果以变量的形式保存在工作空间中,工作空间的所有变量可以保存到一个文件中,以备后用。save(load)文件名变量(2)命令窗口链接用户和MATLAB交互的工具。(3)命令历史记录窗口链接记录每次开始MATLAB的时间及命令窗口运行过的所有指令。(4)当前路径窗口(路径浏览器)链接窗口包括:工具栏、当前目录设置区及所设置目录下的文件详细列表等。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.23(5)程序编辑器菜单栏的File选项中的New或Open选项;工具栏的New或Open按钮;命令窗口键入edit命令;MATLAB界面的Start菜单里;链接操作系统的开始菜单里。链接(6)MATLAB的帮助系统①联机帮助系统链接MATLAB主窗口中单击工具条中的问号按钮;在命令窗口中输入helpwin、helpdesk或doc;选择Help下拉菜单中的帮助选项。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.34②命令查询系统在命令窗口通过帮助命令对特定的内容查询。a.Help:help+函数名b.lookfor:lookfor+关键词c.其他帮助命令:exist,变量或函数检验:exist+变量名(函数名)who,用于当前内存变量列表whos,显示当前内存变量详细信息which,确定函数路径:which+函数名Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.45what,用于当前路径MATLAB文件列表dir,用于当前路径所有文件及文件夹列表(1)变量MATLAB对使用变量名称的规定:变量名称区别英文大小写;变量的长度上限为63个字符(7.0版本)。变量名的第一个字必须是英文字母,随后可以掺杂英文字、数字或是底线。1.5其它Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.56几个持殊变量:ans默认的计算结果的变数名epsMATLAB定义的正的极小值2.2204e-16pi内建π值i,jinf无穷大,如1/0NaN不定量,如0/0Nargin函数的输入变量数目Nargout函数的输出变量数目clear删除工作空间中的变量Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.67(2)注释和标点%百分号后的所有文字为注释,逗号告诉MATLAB显示结果;分号禁止显示多条命令可以被逗号或分号隔开放在同一行。(3)
算术运算及规则加(+)、减(-)、乘(*)、除(/)、幂次方(^)表达式运算优先规则:同代数中运算。(4)复数对复数不需作特殊处理Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.78(5)不同精确度的数字格式显示:-Commandwindows-NumericalFormat,或直接在命令窗口键入指令,例如:formatshort,3.1416预设的4位有效小数位数formatlong,3.14915位有效小数位数formatshorte,3.1416e+0004位有效小数位数指数格式formatshortg,3.1493e+0015位有效小数位数指数格式Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.89c.用简短命令计算并绘制在0x6范围内的sin(2x)、sinx2、sin2x。x=linspace(0,6)y1=sin(2*x),y2=sin(x.^2),y3=(sin(x)).^2;plot(x,y1,x,y2,x,y3)Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.9102.1矩阵1.矩阵的创建遵循的基本规则:整个输入矩阶必须包含在方括号[]中;行与行之间必须用分号(;)或Enter键符分隔;每行中的元素用逗号(,)或空格分隔;矩阵中的元素可以为数字或表达式,但表达式中不可包含未知的变量。矩阵元素可以是复数:用书写复数的方法或“一个实部矩阵+一个虚部矩阵”的方法。当矩阵中没有任何元素时,矩阵为“空阵”(EmptyMatrix)。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.1011(1)直接输入法[例2-1]
用直接输入法创建一个4×4的A矩阵。A=[2,345;3,45,6;4,5677,8,910](2)由函数创建矩阵zeros:生成全部元素为0的零距阵(ZerosArray)ones:生成全部元素为1的距阵eye:生成单位距阵rand:生成均匀分布的随机矩阵,矩阵元素在0-1间diag:生成一个对角阵或由对角线元素组成的向量Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.1112使用形式:①A=zeros(n)生成n×n零矩阵。A=zeros(m,n)或者A=zeros([m,n])生成m×n的零矩阵。A=zeros(m,n,p,…)或者A=zeros([mnp…])生成m×n×p×…的零矩阵。B=zeros(size(A))生成和矩阵A大小相等的全零矩阵。②A=ones(n)生成n×n全1矩阵。A=ones(m,n)或者A=ones([m,n])生成m×n的全1矩阵。A=ones(m,n,p,…)或者A=ones([mnp…])生成m×n×p×…的全1矩阵。B=ones(size(A))生成和矩阵A大小相等的全1矩阵。③A=eye(n)生成n×n单位矩阵。A=eye(m,n)或者A=eye([m,n])生成m×n的单位矩阵。B=eye(size(A))生成和矩阵A大小相等的单位矩阵。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.1213④A=rand(n)生成n×n随机矩阵。A=rand(m,n)或者A=rand([m,n])生成m×n的随机矩阵。A=rand(m,n,p,…)或者A=rand([mnp…])生成m×n×p×…的随机矩阵。B=rand(size(A))生成和矩阵A大小相等的随机矩阵。A=rand不带任何参数将产生一个随机数。⑤A=diag(V)当V为向量时,产生一个以向量V的元素为对角线的矩阵(数组);当V为矩阵时,产生一个以V矩阵的主对角线元素为元素的向量(数组)。[例2—2]
利用diag产生对角阵及对角线向量。链接A=rand(4,4),%创建—个4阶随机矩阵B=diag(A)C=diag(B)Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.1314注意:在MATLAB中,不需要事先定义矩阵的维数,MATLAB自动为矩阵分配存储空间。但如果程序运行过程中采用零矩阵为矩阵生成的全部元素或某一行(列)的元素预先分配内存空间,会大大加快程序运算速度。(zeros)(3)从外部调入数据文件生成矩阵可以是MATLAB矩阵存储的二进制文件(.mat);也可以是数值文本文件,但其中的数据在调入前要先排成矩阵形式;或Excel数据:load()%将数据文件的数据内容调入工作空间xlsread('c:\matlab\work\myspreadsheet','sheet2','a2:j5')Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.1415[例2—3]
直接读入外部数据文件生成一个矩阵
链接loadexample2_3.txt提示:需要调入的文件必须在MATLAB搜索路径范围内,否则找不到文件。另外:可使用Data从外部数据文件中直接读取数据。链接选中文件,单击[打开]按钮,然后打开“ImportWizard”窗口。单击“FINISH”按钮,即可输入打开的数据文件中数据。链接Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.1516(4)特殊矩阵-向量的生成①直接输入②自动创建利用冒号生成向量:x=i:j:k
若j>0,且i<k或j<0且i>k,则生成向量x=[i,i+j,i+2j,...,k];
若j>0,且i>k或j<0且i<k,则生成向量x为空向量。若步长j为1,可省略不写。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.1617利用linspace生成向量:x=linspace(a,b,n)
在a、b之间线性生成有n个元素的行向量x,为等差向量。若不写n,则生成有100个元素的行向量。利用logspace生成向量:x=logspace(a,b,n)在a、b之间生成有n个元素的行向量x,其元素起点x(1)=,终点x(n)=,为等比向量。若不写n,生成有50个元素的行向量x。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.1718[例2—4]利用冒号生成向量。链接a=1:6b=2:2:10c=8:-1:2d=8:1:4[例2—5]利用linspace、logspace函数生成向量。a=linspace(1.5,6.0,5)%元素值在1.5和6.0之间的5个数b=logspace(0,2,4)%元素值在和之间的4个数链接Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.18192.矩阵的保存和调入save命令保存已经存在的矩阵。
saveABMATLAB用.mat文件保存二进制的数据,系统将会自动在文件名后加上后缀.mat。
load命令将保存在文件中的矩阵读到MATLAB工作空间的内存里。
loadEvaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.19203.矩阵的标识、修改及删除(1)标识单下标:A(i);双下标:A(i,j)单个元素:MATLAB运算对列操作,矩阵可认为是
按列优先排列的一个长的列向量。例:矩阵4*4的矩阵A,A=[1234;5678;9101112;13141516]A(1)、A(5)、A(13)、A(2,2)。(需注意特殊矩阵)子矩阵:i,j可以是任意排列的向量,其中任何一个可以是冒号,它表示全部行(在i的位置)或全部列(在j的位置)。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.2021A(30)当矩阵的下标超出矩阵的实际元素的下标时,将给出错误信息。[例2—6]用序号标识方式提取矩阵A的子矩阵。A=magic(4)%产生4维的魔方矩阵A1=A([1:2],[1,2,4])%提取矩阵A的第一行和第二行的第l,2,4列元素A2=A([4,2],:)%提取矩阵A的第四行和第一行的全部元素A([1,3],[2,4])=zeros(2)%使矩阵第一行和第三行的第2,4列元素为0链接Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.2122(2)修改矩阵直接赋值。使用矩阵编辑器(MatrixEditor)来修改矩阵。①打开工作空间窗口②打开矩阵编辑器选中已知变量A,双击或利用快捷菜单,启动矩阵编辑器(ArrayEditor)。
matlabppt链接02.p5.ppt
A=[5,6,7;8,9,10;2,3,4]%创建一个矩阵变量③改变矩阵元素值选中左上方文本框中的矩阵元素,输入要改变的值即可。
Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.2223④改变矩阵的维数⑤确认所有元素符合要求后,关闭对话框,创建了一个新矩阵。⑥在工作窗口中重新键入矩阵名,原矩阵已改。当给矩阵赋一个新元素值时,MATLAB会自动增加矩阵的维数大小。链接Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.2324(3)删除矩阵的行和列双下标可赋值,不能删除矩阵的某个元索,但可以删除矩阵的列或行。例如:A=[123;456],
%矩阵A不为标量,A(1,2)=[]
%给出错误信息,
A(:,2)=[]%删除矩阵A的第二列。单下标可赋值,也可删除矩阵的某个或某些元素,并将剩下的元素按列编成一个长行向量。例如:A=[123;456],
A(3)=[],A(1:2:5)=[]%删除下标为l、3、5的三个元素链接Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.244.矩阵变换函数矩阵旋转函数:B=fliplr(A)%将矩阵A左右翻转得到矩阵BB=flipud(A)%将矩阵A上下翻转得到矩阵BB=flipdim(A,dim)%将矩阵A按给定维数翻转得到
矩阵B,dim=1时,按行转翻;dim=0时,按列翻转。B=rot90(A,k)%将矩阵A逆时针旋转90度得到矩阵B,k为倍数,当k=1时,
可省略。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.2526矩阵提取函数:B=tril(A)%取矩阵A主对角线及以下元素得到矩阵B,
其余元素取0。B=tril(A,k)%取矩阵A第k条对角线及以下元素得到矩阵B,
其余元素取0。B=triu(A)%取矩阵A主对角线及以上元素得到矩阵B,
其余元素取0。B=triu(A,k)%取矩阵A第k条对角线及以上元素得到矩阵B,
其余元素取0。K=0,为主对角线;K>0,为主对角线之上;
K<0,为主对角线之下。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.26275.矩阵的运算加、减、乘、除和乘方,按照线性代数中基本的运算法则进行。加A+B减A-B乘A*B(.*是矩阵对应元素之间的乘积)除A\BA/B转置A’notes:对于复矩阵Z,Z’表示Z的复共轭转置,普通转置用Z.’或conj(Z’)实现。[例2—7]z=[1+i3-2i],z',z.',conj(z')链接Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.27286.矩阵函数(1)线性方程组线性方程组的求解问题:给定两个矩阵A和B,求解满足方程AX=B或XA=B的矩阵X。
正斜杠/和反斜杠\是两个不同的算符。方程AX=B的解用X=A\B表示,称为左除;方程XA=B的解用X=B/A表示,称为右除。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.2829MATLAB常用的基本矩阵运算函数如下:det(A)求方阵A的行列式值dot(A,B)求矩阵A和B的点积eig(A)求矩阵A的特征值和特征向量norm(A,1)求矩阵1_范数norm(A)或norm(A,2)求矩阵A的2_范数norm(A,inf)求矩阵A的无穷大_范数norm(A,'fro')求矩阵A的F_范数Rank(A)求矩阵A的秩Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.2930(2)稀疏矩阵稀疏矩阵:只包含少量非零元素的矩阵。函数sparse创建稀疏矩阵:sparse(i,j,s),其中,第k个非零元素是s(k),s(k)位于i(k)行j(k)列,并要求i,j,s具有相同的长度。[例2—8]As=sparse(1:10,1:10,ones(1,10))稀疏矩阵的转换:A=full(As)链接full(As)再看:As=sparse(2,3,1),full(As)As=sparse(1:2,2:3,[52]),full(As)As=sparse(eye(10))链接Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.3031.稀疏矩阵和满阵的存储方式
链接B=eye(200);Bs=sparse(B);(3)矩阵的逆和伪逆矩阵A为方阵且非奇异,方程AX=I和XA=I的解称为矩阵A的逆,表示为函数:inv求逆NOTE:X=inv(A)*B和X=A\B,应尽量使用后者。A为长方阵时,方程AX=I和XA=I至少有一个无解。这时矩阵的伪逆(广义逆),X=pinv(A).[例2—9]链接C=[8,6;2,5;1,7];X=pinv(C)Q=X*CP=C*XEvaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.3132(4)矩阵的Cholesky和LU、QR分解MATLAB解线性方程基于以下三种分解:chol;对称、正定系数矩阵的Cholesky分解;lu:系数矩阵为普通方阵的Gauss消去法;qr:长方阵的正交分解。①Cholesky分解Cholesky分解把矩阵分解为上三角矩阵和其转置的乘积,即A=R'*R。其中R为上三角阵。[例2—10]链接A=pascal(5)R=chol(A)验证R'*R②LU分解LU分解时将一个方阵表示成两个基本三角阵的乘积,其中一个为上三角矩阵,另一个为下三角矩阵。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.3233[例2—11]链接A=[123;456;780][L,U]=lu(A)注意:计算方程AX=B变为X=U\(L\B),速度提高。③QR分解矩阵Q为实矩阵,且满足Q‘×Q=I,矩阵Q称为正交矩阵。QR分解能把任意长方阵分解为正交矩阵和上三角矩阵的初等变换形式的乘积。[例2—12]链接A=[123;456;789;101112][Q,R]=qr(A)验证Q*R当矩阵的纵横方向上的元素个数相差较大时,R矩阵中的零元素将被压缩掉,Q中的相应的列也被压缩掉。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.3334(5)矩阵的幂和指数函数如果矩阵A是方阵,p为整数,则A^p表示A自乘p次。如果矩阵A是方阵且非奇异,p为整数,则A^(-p)表示自乘p次。注意:在MATLAB里,表达式A^(2/3)是合法的。函数sqrt(A)计算出比A^(1/2)更精确的结果。2.2数组数组:指由一组实数或复数排成的长方阵列(Array)一维:行”或“列”,二维:“矩形”,三维:“若干同维矩形的堆叠”,更高的任意维。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.3435从外观形状和数据结构上看,二维数组和数学中的矩阵没有区别。从运算的角度看,矩阵运算和数组运算属于两种不同的运算:距阵:从矩阵的整体出发,按照线性代数的运算规则进行,有着明确而严格的数学规则;数组:从数组的单个元素出发,针对每个元素进行的运算,它是MATLAB软件所定义的规则,Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.35363.数组函数%子数组查找clearx=-4:4i=find(abs(x)>2)%使用i中的下标创建数组y=x(i)%用于矩阵A=[123;456;789][i,j]=find(A>=5)Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.36374.数组的运算(1)标量-数组运算标量对数组的加、减、乘、除运算是标量对数组的每个元素施加运算。(2)数组-数组运算两个数组具有相同维数时,加、减、乘、除按元素对元素进行。点乘:.*是数组元素对元素的乘法运算。点除:./、\.是数组元素对元素的除法运算。数组除法:正斜杠/和反斜杠\两种,斜杠下的数组都被斜杠上的数组所除。数组的幂:.^为元素对元素的幂。元素对元素数组运算小结链接Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.3738数组寻访和赋值小结:A(r,c)由索引向量r定义的行和由索引向量c定义的列所构成的A中的子数组。A(r,:)由索引向量r定义的行和全部的列所构成的A中的子数组。A(:,c)由全部的行和由索引向量c定义的列所构成的A中的子数组。A(:)A中所有列元素由左到右、首尾相接组成的一长列数组。A(i)单下标寻访,向量i定义的A中元素。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.3839第三章关系和逻辑运算关系和逻辑运算:提供求解真/假命题的答案,控制基于真/假命题的一系列MATLAB命令的流程或执行次序。所有关系和逻辑表达式的输入,MATLAB把任何非零数值当作真,把零当作假。
所有关系和逻辑表达式的输出,对于真,输出为1;对于假,输出为零。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.39关系操作符说明<小于<=小于或等于> 大于>= 大于或等于== 等于~=不等于3.1关系操作符Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.4041运算法则:比较两个同样大小的数组,或一个数组和一个标量。数组(标量)和数组中的每一个元素相比较,所得结果为0和1组成且具有同样维数的数组。[例3—1]关系操作符
链接Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.4142逻辑操作符说明&与|或~非3.2逻辑操作符逻辑操作符:提供了一种组合或否定关系表达式。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.4243运算法则:两个同样大小的数组,或一个数组和一个标量参与运算:数组(标量)和数组中的每一个元素按标量法则进行运算,所得结果为0和1组成且具有同样维数的数组。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.4344两个标量a和b运算,则:a&b:当a,b全是非0时,运算结果是1,
否则是0;a|b:当a,b中只要有一个非0,运算结果为1,否则为0;~a:当a是0时,运算结果是1,否则是0。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.4445在逻辑“与”、“或”、“非”三者中,“与”及“或”从左向右依次执行,且都低于“非”的优先级。通过增加“()”可以改变各操作符之间的优先级。[例3—2]链接逻辑操作符01。[例3—3]链接
链接逻辑操作符02,03。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.45463.3关系与逻辑函数xor(x,y):异或运算。x和y都是零(假)或都是非零(真),相应位置元素为0,否则(x或y非零(真))取1。any(x):若一个向量x中,有非零元素,结果为1,否则为0;若矩阵x中的每一列有非零元素,返回1,否则为0。all(x):若一个向量x中,所有元素是非零,返回1,否则为0;若矩阵x中的每一列所有元素非零,返回1,否则为0。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.46473.4NaNs和空矩阵NaNs和空矩阵([])要求在MATLAB中作特殊处理,特别是用逻辑(关系)表达式时。根据IEEE数学标准,对NaNs的几乎所有运算都得出NaNs。在MATLAB里,空矩阵不等于任何非零矩阵(或标量)。
[例3—4]
链接
空矩阵和NANS。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.4748NaNs和空矩阵特性:数据a=[12naninfnan]表达式结果2*a[24NaNinfNaN](a==nan)[00000](a~=nan)[11111]isnan(a)[00101]y=find(a==0)y=[]isempty(y)1(y==0)[]find(y==0)[]Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.484.1字符串一个字符串是由单引号括起来的简单文本。实质是ASCII的特殊数值数组,字符串是其外在表现形式。字符串里的每个字符是数组里的一个元素,字符串的存储要求每个字符8个字节。[例4—1]链接
字符串。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.494.2字符串转换把数值转换成字符串或从字符串中提取数值数据。abs字符串到ASCII转换setstrASCII转换成字符串int2str整数转换成字符串num2str数字转换成字符串str2num字符串转换成数字fprintf把格式化的文本写到文件中或显示屏上sprintf用格式控制,数字转换成字符串sscanf用格式控制,字符串转换成数字Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.50dec2hex十进制数到十六进制字符串转换hex2dec十六进制字符串转换成十进制数hex2num十六进制字符串转换成IEEE浮点数lower字符串转换成小写upper字符串转换成大写str2mat字符串转换成一个文本矩阵eval(string)求字符串的值feval('fun',x)求由字符串给定的函数值[例4—2]字符串转换01。链接
链接[例4—3]字符串转换02。链接Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.514.3字符串函数findstr从一个字符串内找出子字符串blanks(n)返回一个有n个空格的字符串deblank去掉字符串中后拖的空格strcmp两个字符串相同,返回真值strrep用一个字符串替换另一个字符串strtok在一个字符串里找出第一个标记Ischar(isstr)字符串存在时返回真值isletter字母存在时返回真值isspace空格字符存在时返回真值[例4—4]链接字符串函数。
Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.52535.1For循环For循环允许一组命令以固定的和预定的次数重复。For循环的一般形式:
forx=array {commands} end{commands}按数组中的每一列执行一次。在每次迭代中,x被指定为数组的下一列,即在第n次循环中,x=array(:,n)。[例5—1]%for循环forn=1:10x(n)=sin(n*pi/10)endxEvaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.5354注意点:For循环不能用其内重新赋值循环变量n来终止。%For循环不能用For循环内重新赋值循环变量n来终止。forn=1:10x(n)=sin(n*pi/10)n=11endx2.在For循环内接受任何有效的MATLAB数组。data=[39456;716-15]forn=data%循环按数组中的列数执行
x=n(1)-n(2)nend3.For循环可按需要嵌套。forn=1:5form=5:-1:1A(n,m)=n^2+m^2;end disp(n)end Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.54A4.当有一个等效的数组方法能解决问题时,应避免用For循环。n=1:10;x=sin(n*pi/10)5.为了提高速度,在For循环(While循环)被执行之前,应预先分配数组。%为了得到最大的速度,在For循环(While循环)被执行之前,应预先分配数组。%例如,前面所考虑的第一种情况(for循环00),在For循环内每执行一次命令,变量x的大小增加1。%迫使MATLAB每通过一次循环要花费时间对x分配更多的内存。x=zeros(1,10);%preallocatedmemoryforxforn=1:10x(n)=sin(n*pi/10);endEvaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.55565.2While循环While循环以不定的次数求一组语句的值。While循环的一般形式:whileexpression {commands} end若表达式里的所有元素为真,就执行while和end语句之间的{commands}。通常,表达式的求值给出一个标量,但数组也同样有效。此时,所得到数组的所有元素必须都为真。[例5—7]链接while循环。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.56%While循环num=0;EPS=1;while(1+EPS)>1%EPS=2.2204e-016EPS=EPS/2;num=num+1;endnumEPS %这个例子表明了计算特殊MATLAB值eps的一种方法,它是一个可加到1,而使结果以有限精度大于1的最小数值。%这里我们用大写EPS,因此MATLAB的eps的值不会被覆盖掉。在这个例子里,EPS以1开始。%只要(1+EPS)>1为真(非零),就一直求While循环内的命令值。%由于EPS不断地被2除,EPS逐渐变小以致于EPS+1不大于1。%(记住,发生这种情况是因为计算机使用固定数的数值来表示数。%MATLAB用16位,因此,我们只能期望EPS接近10-16。)在这一点上,(1+EPS)>1是假(零),于是While循环结束。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.57585.3IF-ELSE-END结构命令序列根据对关系的检验有条件地执行。最简单的If-Else-End结构:ifexpression {commands} end若表达式中的所有元素为真(非零),那么就执行if和end语言之间的{commands}。[例5—8]链接if循环00。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.58%用If-Else-End结构来决策,提出一种合理的方法来跳出或中断For循环和While循环EPS=1;fornum=1:1000 EPS=EPS/2; if(1+EPS)<=1%EPS=1.1102e-016EPS=EPS*2breakendm=num+1end num%这个例子演示了估算EPS的另一种方法。在这种情况下,For循环构造成要执行足够多的次数。%If-Else-End结构检验要看EPS是否变得足够小。如果是,EPS乘2,break命令强迫For循环提早结束,num=53。%在这个例子里,当执行break语句时,MATLAB跳到循环外下一个语句。%在现在情况下,它返回到MATLAB的提示符并显示EPS。%如果一个break语句出现在一个嵌套的For循环或While循环结构里,那么MATLAB只跳出break所在的那个循环,%不跳出整个嵌套结构。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.5960若表达式包含有几个逻辑子表达式,即使前一个子表达式决定了表达式的最后逻辑状态,仍要计算所有的子表达式。若有两个选择,If-Else-End结构:ifexpressioncommandsevaluatedifTrueelsecommandsevaluatedifFalseend表达式为真,执行第一组命令;表达式是假,执行第二组命令。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.6061三个或更多选择,If-Else-End结构:ifexpression1commandsevaluatedifexpression1isTrueelseifexpression2commandsevaluatedifexpression2isTrueelseif…………elsecommandsevaluatedifnootherexpressionisTrueendEvaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.6162有三个以上选择的If-Else-End形式,依次检查各表达式,只执行第一个表达式为真值命令串,接下来的关系表达式不检验,跳过其余的If-Else-End结构。而且,最后的else命令可有可无。[例5—9]%函数mmono直接利用了If-Else-End结构mmono(1:12)%strictlyincreasinginput
mmono([1:121213:24])%nondecreasinginput
mmono([132-1])%notmonotonicinanysense
mmono([12:-1:00-1])%nonincreasing
mmono(12:-1:0)%strictlydecrasing
Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.62functionf=mmono(x)%MMONOTestformonotonicvector.%MMONO(x)wherexisavectorreturn:%2ifxisstrictlyincreasing,%1ifxisnondecreasing,%-1ifxisnonincreasing,%-2ifxisstrictlydecreasing,%0otherwise. %Copyright(c)1996byPrentice-Hall,Inc. x=x(:);%makexacolumnvector y=diff(x);%finddifferencesbetweenconsecutiveelements ifall(y>0)%testforstrictfirst f=2; elseifall(y>=0) f=1; elseifall(y<0)%testforstrictfirst f=-2; elseifall(y<=0) f=-1; else f=0;%otherwiseresponse endEvaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.63645.5控制命令break:跳出循环[例5—8]%用If-Else-End结构来决策,提出一种合理的方法来跳出或中断For循环和While循环EPS=1;fornum=1:1000 EPS=EPS/2; if(1+EPS)<=1%EPS=1.1102e-016EPS=EPS*2breakendm=num+1end num %这个例子演示了估算EPS的另一种方法。在这种情况下,For循环构造成要执行足够多的次数。%If-Else-End结构检验要看EPS是否变得足够小。如果是,EPS乘2,break命令强迫For循环提早结束,num=53。%在这个例子里,当执行break语句时,MATLAB跳到循环外下一个语句。%在现在情况下,它返回到MATLAB的提示符并显示EPS。%如果一个break语句出现在一个嵌套的For循环或While循环结构里,那么MATLAB只跳出break所在的那个循环,不跳出整个嵌套结构。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.64Continue:结束本次循环[例5—10]链接continue。Keyboard:控制权给键盘[例5—10]链接continue。Return:返回控制权[例5—10]链接continue。再见第6章-函数递归调用Input:eps1=1;fornum=1:1000eps1=eps1/2;if(1+eps1)>1continue;%程序执行continue语句时,MATLAB跳到for循环的end处,结束这一次for循环。endkeyboard%keyboard停止程序的运行,将控制权交给键盘。return%return退出函数或程序,返回控制权。eps1eps2=eps1*2breakendEvaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.65第六章M文件函数和脚本文件MATLAB两种工作模式:工作空间窗口直接输入简单命令;M文件编程。前者:适用于命令行较简单、输入较方便,处理的问题较特殊、没有一定重复性和普遍性、差错处理较简单的情况。后者:进行大量重复性计算和输入。66Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.666.1M文件定义、规则和属性1.M文件简介形式上:MATLAB程序文件是一个简单ASCⅡ码标准文本文件,扩展名一律用“.m”形式。因为是文本文件,所以任何文字处理软件都可以对它进行编写和修改;特征上:MATLAB的语法比一般的高级语言都要简单,程序容易调试,人机交互性强;功能上:M文件大大扩展了MATLAB的能力。(MATLAB的各种工具箱都由M文件组成。)67Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.67M文件:编写、修改和扩充函数和命令。M文件两种形式:命令文件(脚本文件Script-file);函数文件(Function-file)。2.命令文件建立方法:将输入的所有指令按顺序放到一个扩展名为“.m”的文本文件中,不需要预先定义。运行一个命令文件等价于从命令窗口中按顺序连续运行文件中的指令。命令文件中的语句可以访问MATLAB工作空间中的所有变量。68Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.68在命令文件运行过程中产生的变量等价于直接从MATLAB工作空间建立的变量,均是全局变量,任何其他的命令文件和函数都可以访问这些变量。建立命令文件,并绘制宝石项链图。t=(0:0.02:2)*pi;x=sin(t);y=cos(t);z=cos(2*t);plot3(x,y,z,'b-',x,y,z,'bd')%画三维图view([-80,60])%定义视角,方位角及仰角boxon%打开框状坐标轴legend('链子','宝石');%插入图形说明将文件保存在MATLAB搜索路径上。在命令窗口中直接输入文件名,运行。3.函数文件
如果M文件的开头第一行是function,此文件是函数文件(FunctionFile)。在MATLAB中提供的大部分命令都由函数文件定义。69Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.69[例6—2]链接
函数文件functiony=fliplr(x)%函数定义行%FLIPLR Flipmatrixintheleft/rightdirection.%H1行% FLIPLR(X)returnsXwithrowpreservedandcolumnsflipped% intheleft/rightdirection.% % X=123becomes321% 456654%% SeealsoFLIPUD,ROT90.%H1行至此为在线帮助% Copyright(c)1984-94byTheMathWorks,Inc. ifndims(x)~=2,error('Xmustbea2-Dmatrix.');end%函数体ndims(x)=length(size(A))[m,n]=size(x); y=x(:,n:-1:1);函数文件和命令文件类似之处:都是扩展名为“.m”的文本文件,且都是由文本编辑器所创建的外部文本文件。函数文件和命令文件的区别:命令文件的变量在文件执行完程序后仍然保留在内存中,而函数文件内定义的变量仅在函数文件内部起作用,当函数文件执行完程序后,这些内部变量将被清除。70Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.70(1)函数文件的构成:函数定义行(FunctionDeclarationLine);H1行(TheFirstHelpTextline):第一行帮助行,名为H1行,是由lookfor命令搜索的行。在线函数帮助文件(HelpText);到第一个非注释空行为止的注释行是帮助文本注释;函数体(FunctionBody)。[例6—3]链接函数文件02。functiony=linspace(d1,d2,n) %LINSPACELinearlyspacedvector. % LINSPACE(x1,x2)generatesarowvectorof100linearly % equallyspacedpointsbetweenx1andx2. % LINSPACE(x1,x2,N)generatesNpointsbetweenx1andx2. % SeealsoLOGSPACE,:. % Copyright(c)1984-94byTheMathWorks,Inc. ifnargin('linspace')==2 n=100; end y=[d1+(0:n-1)*(d2-d1)/(n-1)];71Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.71(2)M文件函数的规则和属性函数名和文件名必须相同。B.函数可以有零个或更多个输入参量及输出参量。(例如:函数size)调用函数时,按少于等于函数M文件中所规定的输入和输出变量数进行调用。C.当函数有一个以上输出变量时,输出变量包含在括号内。(例如:函数size)函数nargin给出函数输入参量个数;函数nargout给出函数输出参量个数。72Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientPro.Copyright2004-2011AsposePtyLtd.72D.函数可以递归调用,即M文件函数能调用它们本身。当函数M文件到达M文件终点,或者碰到返回命令return,就结束执行且返回。用递规调用形式计算n的阶乘。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二手注塑机2024年度购销合同范本2篇带眉脚
- 2025版冷链物流货车承包经营合同范本3篇
- 2025年高端装备制造业货物采购运输合同3篇
- 二零二五年度2025场现代农业科技应用推广合同3篇
- 二零二五年度城市绿化项目承包经营合同赔偿细则3篇
- 2025版建筑工程施工安全管理技术咨询合同示范文本
- 二零二五年度彩钢板房拆除工程废弃物处置与资源化利用协议2篇
- 二零二五年度隧道工程安装施工合同6篇
- 二零二五年度人工智能伦理与隐私保护合同法解读
- 2025年度新型木材加工钢材买卖居间服务与技术支持合同4篇
- 特鲁索综合征
- 《向心力》 教学课件
- 结构力学数值方法:边界元法(BEM):边界元法的基本原理与步骤
- 2024年山东省泰安市高考语文一模试卷
- 工程建设行业标准内置保温现浇混凝土复合剪力墙技术规程
- 北师大版物理九年级全一册课件
- 2024年第三师图木舒克市市场监督管理局招录2人《行政职业能力测验》高频考点、难点(含详细答案)
- RFJ 006-2021 RFP型人防过滤吸收器制造与验收规范(暂行)
- 盆腔炎教学查房课件
- 110kv各类型变压器的计算单
- 新概念英语课件NCE3-lesson15(共34张)
评论
0/150
提交评论