版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数学建模Matlab基础讲义主要内容一.MATLAB介绍二.MATLAB的数值计算功能四.MATLAB三.MATLAB的符号运算功能五.MATLAB的基本图形处理功能一.MATLAB介绍1、MATLAB的优点MATLAB被誉为“巨人肩上的工具”。由于使用Matlab编程运算与人进行科学计算的思路和表达方式完全一致,所以不像学习其它高级语言--如Basic、Fortran和C等那样难于掌握,用Matlab编写程序犹如在演算纸上排列出公式与求解问题,所以又被称为演算纸式科学算法语言。——语言简单MATLAB的含义是矩阵实验室(MATRIXLABORATORY),主要用于方便矩阵的存取,其基本元素是无须定义维数的矩阵。MATLAB自问世以来,就是以数值计算称雄。MATLAB进行数值计算的基本单位是复数数组(或称阵列),这使的MATLAB高度“向量化”。由于它不需定义数组的维数,并给出矩阵函数、特殊矩阵专门的库函数,使之在求解诸如信号处理、建模、系统识别、控制、优化等领域的问题时,显得大为简捷、高效、方便,这是其它高级语言所不能比拟的。——编程容易,效率高MATLAB中包括了被称作工具箱(TOOLBOX)的各类应用问题的求解工具。包括信号处理、图象处理、控制系统辨识、神经网络等。——功能强大MATLAB5.3以后的版本中包括了图形界面编辑GUI,改变了以前单一的“在指令窗通过文本形的指令进行各种操作”的状况。——操作方便2、MATLAB的环境(1)MATLAB的桌面平台MATLAB桌面平台主要包含以下工具(见Figure1-1)命令窗口命令历史窗口当前目录窗口演示工具工作间管理窗口启动菜单通过新建命令还可以打开M文件编辑窗口、图形窗口、建模窗口、GUI窗口和部署项目(DeploymentProject)窗口。Figure1-1MATLAB桌面平台当前目录窗口工作间管理窗口命令窗口命令历史窗口演示工具启动菜单(2)MATLAB的帮助系统有三种方式获得MATLAB帮助:①通过使用帮助浏览器(Figure1-2)②命令窗口help系列。使用方式是在命令行输入help,help+函数名,Helpwin或者helpdesk。Figure1-2帮助浏览器③使用lookfor函数。若要查找一个不知其确切名称的函数名时使用。其他常用查询辅助命令:exist变量检验函数,检验变量是否存在。what目录中文件列表who内存变量列表whos内存变量详细信息which确定文件位置(3)MATLAB通用命令和技巧命令说明命令说明cd显示或更改工作目录hold图形保持开关dir显示目录下文件disp显示变量或文字内容type显示文件内容path显示搜索路径clear清理内存变量save保存内存变量到指定文件clf清除图形窗口load加载指定文件的变量pack收集内存碎片diary日志文件命令clc清除工作窗quit退出MATLABecho工作窗信息显示开关标点定义标点定义:具有多种应用功能.域访问符等;区分行及取消运行显示等…续行符,区分列及函数参数分隔符%注释标记()指定运算过程的先后顺序‘字符串标示符[]矩阵定义的标志等!调用DOS{}构成单元数组等=赋值运算符(4)MATLAB的搜索路径与扩展①搜索路径对话框。菜单中的Path(见图Figure1-3)②path命令。例如:path(path,’G:\mymatlabexamples’)③genpath命令。④editpath或pathtool命令。见图Figure1-3⑤addpath命令扩展目录。例如:addpathe:\myfiles–end(-begin);Figure1-3路径设置
二.MATLAB的数值计算功能1、变量MATLAB程序中的基本数据单元称为阵列(Array),是一个分为行与列的数据集合。变量被看做是只有一行一列的阵列。MATLAB语言不需要对变量进行事先声明,也不需要指定变量类型,它会自动根据所赋予变量的值或对变量所进行的操作来确定变量的类型。其命名规则为:(1)变量名的大小写是敏感。(2)变量的第一个字符必须为英文字母,而且不能超过31个字符。(3)变量名可以包含下划线、数字,但不能为空格符、标点。(4)命名变量时可以取一个容易记忆并且能表达出其含义的名称,如汇率,可以定义为exchange_rate。对于变量作用域,默认情况是局部变量,使用global定义全局变量,而且全局变量常用大写的英文字母表示。MATLAB预定义的变量如下表所示:ans预设的计算结果的变量名epsMATLAB定义的正的极小值=2.2204e-16pi内建的π值inf∞值,无限大
NaN无法定义一个数目i或
j虚数单位i=j=√-1nargin函数输入参数个数nargout函数输出参数个数realmax最大的正实数21023realmin最小的正实数2-1022flops浮点运算次数在定义变量时要尽量与避免与这些名字相同,以免改变它们的值,如果已经改变,可以通过clear+变量名来恢复它的初始值,也可以通过重新启动MATLAB恢复这些值。2、数字变量(1)演算纸式的科学计算方式。输入数字运算表达式然后回车即可。(2)数字的输入输出格式。所有数据均按IEEE浮点标准的长型格式存储。输入格式沿用了C语言的风格和规则;输出格式使用format+数据格式命令控制,只影响在屏幕上的显示结果,不影响内部的存储和运算。3、字符串使用单引号设定后输入或赋值。如:s=‘matrixlaboratory’,字符串的每个字符(包括空格)都是字符数组的一个元素,可以使用size(变量名)查看字符数组的维数。在MATLAB中,字符串与字符数组(矩阵)基本上是等价的,都是以阵列形式存储。函数char用来生成字符数组(矩阵)如:s=char(‘M’,’A’,’T’,’L’,’A’,’B’);函数double可以将字符串转化为数值代码(ASCII码),函数cellstr将字符数组转化为字符串。数值数组和字符串之间的转换函数如下表所示:函数名功能函数名功能num2str数字转化为字符串str2num转换字符串为数字int2str整数转化为字符串sprintf将格式数据写为字符串mat2str矩阵转化为字符串sscanf在格式控制下读字符串字符串操作函数如下表所示:函数名功能函数名功能strcat链接串strrep以其他串代替此串strvcat垂直链接串strtok寻找串中记号strcmp比较串upper大写转化strncmp比较前n个字符lower小写转化findstr在其他串中找此串blanks生成空串strjust证明字符数组deblank移去串内空格strmatch查找可能匹配的字符串ischar字符串检验iscellstr字符串的单元阵检验isletter字母检验isspace空格检验hex2num十六进制转双精度数值hex2dec十六进制转十进制dec2hex十进制转十六进制bin2dec二进制转十进制dec2bin十进制转二进制base2dec转换B底字符串为十进制dec2base十进制整数转为B底串stringsstrings函数的帮助用eval函数实现字符串执行的功能。如:eval(['M'num2str(1)'=magic(5)'])4、单元型变量(cellarrays)(1)单元型变量的定义。两种方法:赋值语句和cell函数。例如:A={[13-7;208;051],’Thisisatextstring’,1:4}。赋值时还可以采用直接对单元型变量中的元素直接赋值的方法,实现方式是用cell函数预先分配存储空间,A=cell(1,3),建立一个一行三列的单元型变量。单元型变量是一种以任意形式的数组为元素的多维数组。单元型变量的引用可以使用大括号作为下标的标示(显示全部内容)和小括号作为下标的标示(显示压缩形式)。(2)相关函数函数功能函数功能cell生成单元型变量deal输入输出处理cellfun对单元型变量中的元素作用的函数cell2struct单元型变量转为结构型变量celldisp显示单元型变量的内容struct2cell结构型变量转为单元型变量cellplot图形显示单元型变量的内容iscell是否为单元型变量num2cell将数值数组转为单元型变量reshape改变单元数组的结构5、结构型变量(1)结构型变量类似C语言中的结构体,它和单元型变量的区别在于结构型变量是以指针方式来传递数据,并且每一个元素都有一个独立的名字。两种定义方式,直接赋值定义和由函数struct定义。结构型变量名=struct(元素名1,元素值1,元素名2,元素值2,…)例如:=‘John’;student.addr=‘123MainStreet’;student.city=‘ZB’;%建立一个名为student的结构型变量(2)相关函数函数功能函数功能struct生成结构型变量rmfield删除属性fieldnames得到属性名isfield判断是否为结构型变量的属性getfield得到属性值isstruct判断是否为结构型变量setfield设定属性值6、向量及其运算(1)向量的生成①命令窗口直接输入,使用[],元素之间用空格、逗号或者分号隔开。②使用冒号表达式,基本形式为x=x0:step:xn,其中xn为尾元素数值限,而不一定是尾元素的值。当step=1时可省略步长。③生成线性等分向量,使用linspace函数。Y=linspace(x1,x2,n)③生成对数等分向量,使用logspace函数。Y=logspace(x1,x2,n)(2)基本运算数加(减)、数乘、点积(dot函数)、叉积(cross函数)、混合积dot(a,cross(b,c))7、矩阵及其运算(1)矩阵的生成①命令窗口直接输入,使用[],元素之间用空格、逗号或者分号(行与行之间的分隔符)隔开。②创建M文件输入大矩阵。(2)基本运算①矩阵的四则运算。其中乘法运算要注意相乘的双方有相邻公共维,除法分为左除“\”和右除”/”(需要计算逆矩阵)②矩阵的逆运算。Inv函数。③矩阵的幂运算。^。④矩阵的指数运算。expm、expm1、expm2、expm3⑤矩阵的对数运算。logm⑥矩阵的特征值函数。eig和eigs⑦矩阵的奇异值函数。svd和svds⑧矩阵的条件数函数。cond,condest,rcond⑨特征值的条件数函数。codeig⑩范数函数。norm,normest其他还有秩函数rank,迹函数trace,零空间函数null,正交空间函数orth,伪逆函数pinv等(3)矩阵分解函数①特征值分解,[v,d]=eig(X),[v,d]=eig(X,’nobalance’),[v,d]=eig(A,B),②复数特征值对角阵与实数块特征值对角阵的转化[V,D]=cdf2rdf(V,D),[U,T]=rsf2csf(U,T)③奇异值分解,[U,S,V]=svd(X)④LU分解,lu函数⑤Chol分解,chol函数⑥QR分解,qr函数(4)特殊矩阵①空阵[],可以用clear从内存中清除②全0阵zeros,单位阵eye,全1阵ones,随机阵rand/randn③其他特殊矩阵见下表函数功能函数功能compan伴随阵magic魔方阵galleryHigham测试阵rosser经典对称特征值测试阵hadamardHardamard矩阵toeplitzToeplitz矩阵hankelHankel矩阵pascalPascal矩阵hilbHilbert矩阵vander范德蒙矩阵invhilb反Hilbert矩阵wilkinsonWilkinson’s特征值测试矩阵(5)矩阵的一些特殊操作①变维。有两种方法,使用冒号(:)和使用函数reshape使用“:”表达式对两个矩阵进行变维操作,需要预先定义两个矩阵的维数;reshape有两种形式,分别为reshape(X,M,N)和reshape(X,M,N,P…)②变向主要函数如下表所示:函数功能函数功能fiplr矩阵左右翻转diag产生或提取对角阵fipud矩阵上下翻转tril产生下三角fipdim矩阵特定维翻转triu产生上三角Rot90矩阵反时针90翻转③矩阵的抽取对角线元素抽取函数diag(X,k)/diag(v,k),抽取矩阵X的第k条对角线的元素向量/使得向量v为所得矩阵的第k条对角线元素。上三角元素抽取tril(X,k)和下三角元素抽取triu(X,k)④扩展两种方法:利用对矩阵标示块的赋值命令X(m1:m2,n1:n2)=a生成大矩阵,其中m2-m1+1必须等于a的行维数,n2-n1+1必须等于a的列维数,生成m2×n2维的矩阵X;利用小矩阵组合生成大矩阵,要严格注意矩阵大小的匹配。7、数组及其运算(1)基本数组运算同型矩阵之间的运算通常称为数组运算。(矩阵的数组运算)①四则运算。数组的乘除法是指两个同维数组间对应元素之间的乘除法,运算符为”.*”,”./”和”.\”。数组与常数之间的运算可以加”.”,也可以不加。②幂运算。.^,对每个数组元素的幂运算。③指数运算exp,对数运算log和开方运算sqrt。(2)数组函数运算只要把运算的数组带入到函数中就可以了,通用形式为funname(A)(3)逻辑运算①基本逻辑运算。参见下一页表格②逻辑关系函数运算。参见下一页表格指令含义函数名<小于lt<=小于等于le>大于gt>=大于等于ge==等于eq~=不等于ne&逻辑与and|逻辑或or~逻辑非not指令含义指令含义xor不相同就取1,否则取0isequal相等取1,否则取0any只要有非0就取1,否则取0ismember两个矩阵是属于关系取1,否则取0all全为1取1,否则为0isempty矩阵为空取1,否则取0isnan为数NaN取1,否则为0isletter是字母取1,否则取0(可以是字符串)isinf为数inf取1,否则为0isstudent学生版取1isfinite有限大小元素取1,否则为0isprime质数取1,否则取0ischar是字符串取1,否则为0isreal实数取1,否则取0find寻找非零元素坐标isspace空格位置取1,否则取0isnumeric判断数值矩阵islogical判断逻辑数组8、多项式运算(1)多项式的表示方法——转化为向量问题对于多项式用下面的行向量表示:①系数向量直接输入法,MATLAB自动将向量元素按降幂顺序分配给各系数值。函数poly2sym可以将向量表示的多项式转化为符号多项式表示。②特征多项式输入法,从矩阵求其特征多项式获得,由函数poly实现。注:由特征多项式生成的多项式首项系数一定为1;n阶矩阵一般产生n次多项式。③由根创建多项式,由函数poly实现。注:若要生成实系数多项式,则根中的复数必定对应共轭;生成的多项式向量包含很小的虚部时可用real命令将其过滤掉。(2)多项式的运算①多项式求值。输入变量值代入多项式计算时以数组为单元的使用函数polyval;以矩阵(必须为方阵)为计算单元求多项式的值用函数polyvalm;②多项式求根。两种方法,一种是调用函数roots,另一种是通过建立多项式的伴随矩阵再求其特征值的方法得到多项式的所有根。(使用compan和eig函数)③多项式的乘除法运算。乘法使用函数conv(向量卷积),除法使用函数deconv④多项式微分。微分函数polyder⑤多项式拟合。两种方法,一种是由矩阵的除法求解超定方程来进行,另一种是用拟合函数polyfit,调用方式为polyfit(X,Y,n)和[p,s]=polyfit(X,Y,n)三.MATLAB的符号运算功能早期的MATLAB不具备符号运算功能,在1993年Mathworks公司从加拿大滑铁卢大学购买了Maple的使用权,并在此基础上,利用Maple函数库,开发了符号计算工具箱(SymbolicToolbox),从此MATLAB便具备了数值计算、符号计算和图形处理三大基本功能于一身,称为在数学计算领域功能最强的语言。MATLAB实现符号计算功能主要有三种途径:①调用MATLAB开发的各种功能函数进行常用的符号运算,如符号表达式和符号矩阵的基本操作,符号矩阵的运算,符号微积分,符号线性方程求解,符号微分方程求解,特殊数学符号函数以及符号函数图形等。②通过使用函数maple.m和mpa.m与Maple接口,给一些特殊专业的人员提供方便。③符号函数计算器(FunctionCalculator)功能。1、符号表达式的生成符号表达式包括符号函数和符号方程,区别在于是否带有等号。只要在表达式两端添加分号(’’)就可以创建一个符号函数或者符号方程,例如:f=‘log(x)’,g=‘a*x^2+b*x+c=0’,也可以用函数sym或syms创建,如f=sym(‘cos(x)’),f=sym(‘sin(x)^2=0’);symsx;f=sin(x)+cos(x),注意syms不用创建符号方程。2、符号与数值的转换常用的方法是函数digits和vpa配合替换函数subs进行转换。digits函数,digits(D)函数设置有效数字个数为D的近似解精度。vpa函数,R=vpa(S)符号表达式S在digits函数设置下的精度的数值解。vpa(S,D)符号表达式S在digits(D)精度下的数值解。subs函数,subs(S,OLD,NEW)numeric函数,n=numeric(S)将不含自由变量的符号表达式转换为数值形式,效果等同于n=double(sym(S))3、符号函数的运算(1)复合函数运算。compose函数,其调用形式如下:compose(f,g)返回f(g(y))compose(f,g,z)返回以z为自变量的复合函数compose(f,g,x,z)返回f(g(z)),且使得x为f的独立变量compose(f,g,x,y,z)返回f(g(z)),且使得x为f的独立变量,y为g的独立变量,例如若f=cos(x/t),y=sin(y/u),compose(f,g,x,y,z)返回cos(sin(z/u)/t);compose(f,g,x,u,z)返回cos(sin(y/z)/t)。(2)反函数运算。finverse函数,调用形式为:g=finverse(f)g=finverse(f,v)返回的符号函数表达式的自变量为符号v,当f包括不止一个变量时最好使用此型。4、符号矩阵的创立(1)使用sym函数直接创建符号矩阵。同直接创建数值矩阵相同(2)用创建子阵的方法创建符号矩阵。要保证同一列的各元素字符串具有相同的长度(3)将数值矩阵转化为符号矩阵。sym(4)符号矩阵的索引和修改。同数值矩阵相同5、符号矩阵的运算(1)基本运算。包括加(+)、减(-)、乘(*)、除(/,\)、转置(‘)(2)行列式运算。det(A)(3)符号矩阵的逆。inv(A)(4)符号矩阵的秩。rank(A)(5)符号矩阵的幂运算。^(6)符号矩阵的指数运算.数组指数用exp,矩阵指数用expm(7)符号矩阵的分解。包括特征值分解函数eig,奇异值分解函数svd,约当标准型函数jordan,三角抽取函数diag,tril,triu。(8)矩阵的空间运算。包括列空间运算colspace,所得结果列的维数即为秩,零空间运算函数null(A)-正交基,null(A,’r’)-有理基。(9)符号矩阵的简化。因式分解factor(S),大整数分解factor(sym(‘N’));展开expand(S);同类式合并collect(S)合并同类项,collect(S,v)合并v的同幂项;符号简化simple(S),simplify(S)-简化符号矩阵的每一个元素。分式通分horner-秦九韶型多项式表达式函数(一种嵌套形式,可以减少乘法计算次数)6、符号微积分(1)符号极限。limit函数,调用形式有:limit(F,x,a)F在x→a条件下的极限值limit(F,a)计算由findsym(a)返回的独立变量趋向于a的极限值limit(F)计算a=0时的极限limit(F,x,a,’left’)或limit(F,x,a,’right’)分别求左右极限(2)符号积分。int函数,调用形式为:int(S)int(S,v)对自变量v的不定积分int(S,a,b)计算从a到b的定积分,a,b为双精度或符号数量int(S,v,a,b)计算对变量v从a到b的定积分(3)符号合计函数symsum,调用形式:symsum(S)计算符号表达式对由findsym函数返回的符号变量的不定和。symsum(S,v)symsum(S,a,b)和symsum(S,v,a,b)(4)符号微分和差分微分和差分函数diff,调用形式:diff(S),diff(S,’v’)或diff(S,sym(‘v’)),diff(S,n)梯度函数gradient,调用形式:[FX,FY]=gradient(F),[FX,FY]=gradient(F,H),H作为各方向的点间隔,[FX,FY]=gradient(F,HX,HY),[FX,FY,FZ]=gradient(F),[FX,FY,FZ]=gradient(F,HX,HY,HZ)。多元函数的导数。jacobian(f,v),计算数量或向量f对向量v的Jacobi矩阵,当f为数量时函数返回f的梯度。7、符号代数方程求解(1)线性方程组的求解,函数linsolve,solve,可以得到方程的精确解(2)非线性方程的符号解法,使用函数fsolve,调用格式有:X=fsolve(‘fun’,X0)X=fsolve(‘fun’,X0,options)options为选择参数输入向量X=fsolve(‘fun’,X0,options,’gradfun’),gradfun为输入函数在X处的偏导数X=fsolve(‘fun’,X0,options,’gradfun’,P1,P2,…)P1,P2为问题定性参数[X,options]=fsolve(‘fun’,X0,…)返回使用的优化方法的参数注:复杂的符号函数可以在M文件中创建8、符号微分方程求解带微分方程的符号解,使用函数dsolve9、符号函数的二维图(1)符号函数的简易绘图函数ezplot(f),ezplot(f,xmin,xmax),ezplot(f,[xmin,xmax],fig)(2)绘制函数图函数fplot,调用格式有:fplot(fun,lims)绘制由字符串fun指定函数名的函数在x轴区间lims=[xminxmax]的函数图,fun必须为一个m文件的函数名或对变量x的可执行字符串。fplot(fun,lims,tol)tol<1用来指定相对误差精度,默认值为0.002fplot(fun,lims,n)n>=1指定以最少n+1个点来绘制图形,默认n=1。fplot(fun,lims,’LineSpec’)以指定线型绘制图形[x,y]=fplot(fun,lims,…)只返回用来绘图的点的向量值,不绘出图形。10、图示化函数计算器(funtool)四.MATLAB程序设计用MATLAB语言编写的程序,称为M文件。M文件有两类:命令式文件和函数式文件。命令式文件:命令行的简单叠加,没有输入参数,也不返回输出参数。它调用MATLAB工作域内所有的数据,而且产生的所有变量都是全局变量,需要用clear或quit清除。函数式文件:解决参数传递和函数调用的问题,有输入参数,可返回输出参数。第一句必须以function语句为引导。其中的变量除了特殊声明外均为局部变量。编写函数式文件注意事项:(1)文件名和函数名保持一致。(2)function后的语句定义函数和输入输出参数在函数被调用过程中将按此输入输出格式执行。(3)要养成良好的注释习惯。(4)善于将比较大的任务分解成容易处理的子任务。函数式文件的形式如下:function[outarg1,outarg2,…]=fname(inarg1,inarg2,…)%H1commentline%Othercommentlines…executablecode..(return)1、控制语句(1)循环语句①for循环。特点是其循环判断条件是对循环次数的判断,即要预先设定好循环次数。forv=expressionstatementsendexpression表示为m:n或者m:i:n注:for循环一定要有end作为结束标志。循环语句中可以使用分号;防止出现中间结果。循环语句书写要有层次,增加可读性。如果m或n有小于1的值,结构上合法但是不运行,对于缺少的元素系统会自动添加。循环语句比较耗时,能不用循环的地方要尽量避免使用。例如:向量t=[-10135]’,由此生成一个范德蒙矩阵n=max(size(t));forjj=1:nforii=1:na(ii,jj)=t(ii)^(n-jj);endendn=max(size(t));a(:,n)=ones(n,1);forjj=n-1:-1:na(:,jj)=t.*a(:,jj+1);end②while循环。判断控制可以是一个逻辑判断语句,适用性更加广泛。格式为:
while(expression)statements;
end如果expression为非零值(真),statements重复执行直到expression为假。(2)选择语句①if-[elseif]-…-else-end其执行步骤如下:判断表达式紧跟在关键字if后面,首先被计算。若计算结果为0,判断值为假,若为1,则判断值为真若判断值为真,则执行其后语句,否则跳过。if语句有下面三种格式:格式一:if条件语句组
end格式二:if条件语句组1else
语句组2end格式三:if条件1
语句组1elseif条件2
语句组2……elseif条件m
语句组melse
语句组m+1end②switch-case-otherwise语句格式为switch表达式
case值1
语句组1case值2
语句组2……case值m
语句组motherwise
语句组m+1end2、人机交互语句(1)echo命令。echo命令可使文件命令在执行时可见,常用于命令式文件,有利于程序的调试和演示。格式有:echoon/off,echo,echofile,echoon/offall(2)用户输入提示命令inputinput命令用于向计算机输入一个参数,并等待键盘输入。调用格式:A=input(提示信息,选项);注:‘s’选项,则允许用户输入一个字符串。a=input('a=?');b=input('b=?');c=input('c=?');d=b*b-4*a*c;x=[(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a)]例如:求一元二次方程a2+bx+c=0的根(3)请求键盘输入命令keyboard当程序遇到此命令时,MATLAB就将暂时停止运行程序并处于等待键盘输入状态,处理完毕后键入“R”程序将继续执行。在M文件中使用此命令有利于调试及程序运行中修改变量。(4)等待用户反应命令pause(延迟秒数)暂停程序的执行,等待用户按任意键后继续,在程序调试或看中间结果时很有用。(5)中断命令breakbreak语句常用于循环语句或条件语句中。(6)命令窗口输出函数disp调用格式:disp(输出项)注:输出项为字符串或矩阵。例如:
A='Hello,MATLAB';disp(A)输出为:Hello,MATLABstr=[‘Thevalueofpi=’num2str(pi)];disp(str);(7)格式化输出函数fprintf用法同C语言中的printf语句,其调用格式为:fprintf(format,data);例如:fprintf(‘Thevalueofpiis%f\n’,pi);3、函数变量及变量作用域1)MATLAB语言中的变量主要有输入变量,输出变量和函数内部变量。输入变量相当于函数的入口数据,是一个函数操作的主要对象,MATLAB提供nargin函数来控制输入变量的个数。调用格式一:Functionc=test(a,b)if(nargin==1)c=det(a);elseif(nargin==2)c=a+b;end调用格式二:nargin(‘function’)返回函数的输入变量的个数。2)实现不定数目输入变量的函数varargin,对函数的一切输入变量将存储在以varargin命名的单元型变量中。调用格式:function[out1,out2,...]=fname(varargin)3)函数inputname,只能在用户定义的M文件中使用。调用格式:inputname(inputvarno)inputvarno为输入变量列表中的位数,调用该函数后将返回输入变量列表中指定位数的变量在工作空间中的变量名.与输入变量对应的还有输出变量控制函数nargout,vargout,用法与输入变量控制函数类似。4、子函数和局部函数在函数定义中开头位置定义的函数为主函数,而在函数体内定义的其他函数为子函数,子函数只能为主函数或同一主函数下其他的子函数所调用。MATLAB语言把放置在目录private下的函数称为局部函数,这些函数只能由其父目录中的函数调用。5、程序设计中的辅助函数1)执行函数函数名说明函数名说明eval字符串调用builtin外部价在调用内置函数evalc执行Matlab表达式assignin工作空间中的分配变量feval字符串调用M文件run运行脚本文件evalin计算工作空间中的表达式feval用于调用M文件,该函数识别不出多组的输入变量,只能为单组输入变量操作,一般用在以其他函数名为输入变量进行操作的函数内,以实现在程序设计中对未知函数的操作。调用格式为:[y1,y2,...yn]=feval(function,x1,x2,...,xn)function可以是内置函数也可以是用户自定义的函数。builtin也用来执行函数,不过它执行内置函数。evalin可以对指定的工作空间中的变量进行操作,调用格式为:evalin(workspacename,’expression’)assignin用来在指定的工作空间中分配变量。2)容错函数error(‘错误信息’)中断程序运行,显示错误信息。warning(‘错误信息’)不中断程序执行,只给出警告信息。try语句段1catch语句段2end错误捕获lasterr,lastwarn,errortrapon/off等函数3)时间函数函数名说明函数名说明now数值型显示当前时间日期datevec转化为向量形式显示日期date字符型显示当前日期calendar当月的日历表clock向量形式显示时间和日期weekday当前日期对应的星期表达datenum转化为数值型格式显示日期eomday给出指定年月的当月最后一天datestr转化为字符型格式显示日期datetick指定坐标轴的日期表达式cputime以CPU时间方式计时tictoc计时开关函数etime计算两个时刻的时间表t=cputime;{需要计时程序段};t=cputime-t;tic;{需要计时程序段};toc;t0=clock;{需要计时程序段};etime(clock,t0)6、程序设计的优化(1)以矩阵作为操作主体循环运算是MATLAB语言最大的弱点,程序设计中要尽量避免使用循环,绝大多数的循环运算可以转换为向量运算。(2)数据的预定义虽然MATLAB语言没有规定变量使用时必须预先定义,但是对于未定义的变量,如果操作过程中出现越界赋值时,系统将不得不对变量进行扩充,这大大降低了程序运行的效率。例如:functionc=test1forii=1:50c(ii)=det(pascal(ii));endfunctionc=test2c=zeros(50,1);forii=1:50c(ii)=det(pascal(ii));endt=0.124126st=0.006310s(2)内存管理函数名说明函数名说明clear从内存中清除变量及函数pack重新分配内存quit退出MATLABsave把指定变量存到磁盘load从磁盘调出指定变量pack函数在一定程度上可以解决outofmemory的错误,该函数将把内存中所有使用的变量暂存入磁盘,然后再用内存中连续的空间存储这些变量。7、程序调试(1)M文件错误的种类。分语法错误和执行错误两种。语法错误发生在M文件程序代码的解释过程中,一般是由函数参数输入类型有误或者矩阵运算阶数不符等引起的。执行错误的发生是由于在程序运行过程中,出现溢出或死循环等引起的,由程序本身引起的,较难发现解决。(2)错误的识别将程序的每一步执行结果输出到命令窗口,检查运行中间的结果,实现方法可以去掉分号,也可以添加断点。使用keyboard函数中断程序。某些情况下可以注释掉函数头,变为脚本文件执行。使用MATLAB调试功能。(3)调试过程dbstop用来在M文件中设置断点,dbstopin<M文件名>at<行号>dbstatus显示断点信息dbtype显示M文件文本dbstep从断点处继续执行M文件dbstack显示M文件执行时调用的堆栈dbup/dbdown实现工作空间的切换dbquit退出函数调试状态8、M文件的调用记录(1)profile函数,调用格式:通过记录M文件调用过程可以分析执行过程中各函数的耗时情况,由此可以了解文件执行过程中的瓶颈问题。profile<优化参数>s=profile(‘status’)显示当前调用状态stats=profile(‘info’)中断调用并返回记录结果(2)调用记录结果显示protest_eig将记录输出到test_eig.html文件中。pro将调用记录结果显示为条状图9、函数句柄函数句柄用来保存函数的相关信息,尤其是关于函数执行的信息,有以下优点:可以方便的实现函数间的互相调用。可以获得函数加载的所有方式。拓宽子函数以及局部函数的使用范围。可以提高函数调用过程中的可靠性。可以减少程序设计的冗余。可以提高重复执行的效率。函数句柄可以与数组、结构型数组以及单元型数组结合定义数据。(1)函数句柄的创建和显示通过@引导函数名即可创建相应的函数句柄。如:fun_handle=@load函数句柄的内容可以通过函数functions(函数句柄)来显示。函数句柄实际是一个结构型数组。(2)函数句柄的调用和操作通过feval可以进行函数句柄的调用,格式为:feval(<函数句柄>,参数列表)执行以参数列表为输入变量的函数句柄所对应的函数。函数句柄与函数名字符串之间可以进行转换,函数为func2str和str2func函数isa可以判断变量是否为函数句柄。函数isequal可以判断两函数句柄是否相同。五.MATLAB的基本图形处理功能1、二维图形绘制二维图形最常用的函数是plot,调用格式有以下三种:(1)plot(Y)如果Y为实向量,则以Y的索引坐标作为横坐标,以Y本身的元素作为纵坐标。如果Y为复数向量,则以该向量实部为横坐标,虚部为纵坐标。y=rand(100,1);plot(y)x=rand(100,1);z=x+y.*i;plot(z)(2)plot(X,Y)此时以X为横坐标,Y为纵坐标。X和Y要求维数必须相同。当变量X和Y是同阶矩阵时,将按照矩阵的行或列进行操作。(3)plot(X,Y,s)第三个变量用于设置图形显示属性。设置图形的线型、颜色、标记等。x=0:0.01*pi:2*pi;y=[sin(x’),cos(x’)];plot([x’,x’],y);x=0:0.01*pi:pi;y=sin(x);z=cos(x);plot(x,y,’--k’,x,z,’-.rd’);2、特殊的二维图形函数(1)特殊坐标系的二维图形函数,区别于均匀单y轴坐标系而言,具体有对数坐标系、极坐标系和双y轴坐标等。①对数坐标曲线,主要有semilogx,semilogy和loglog,前两个分别以x坐标和y坐标为对数坐标,后一个是双对数坐标。x=0:.1:10;semilogy(x,10.^x)x=1:0.1*pi:2*pi;y=sin(x);semilogx(x,y,'-*')x=logspace(-1,2);loglog(x,exp(x),'-s')gridon②极坐标系函数polar,调用形式为:polar(theta,rho)或polar(theta,rho,s)③双纵坐标(双y轴坐标系)函数plotyy,调用形式为:plotyy(X1,Y1,X2,Y2)plotyy(X1,Y1,X2,Y2,fun)fun可以是plot、semilogx、semilogy或loglogplotyy(X1,Y1,X2,Y2,fun1,fun2)fun1绘制(X1,Y1),fun2绘制(X2,Y2)注:双坐标绘制图形的调用过程中,不能够像前面的plot函数那样对曲线属性进行设置,需要使用句柄图形控制完成。x=0:0.01:20;y1=200*exp(-0.05*x).*sin(x);y2=0.8*exp(-0.5*x).*sin(10*x);[AX,H1,H2]=plotyy(x,y1,x,y2,'plot');(2)二维特殊函数图形函数名说明函数名说明函数名说明area填充绘图feathe
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 延迟退休年龄:劳动合同样本与实施方案
- 2023年厦门市前埔北区小学顶岗人员招聘考试真题
- 2023年平顶山市石龙区事业单位招才引智考试真题
- 黑龙江齐齐哈尔建华区公益性岗位招聘真题
- 公众号年终总结个人
- 青少年安全自护国旗下演讲稿模板5篇
- 海洋环境监测无人艇系统可行性分析报告
- 苹果商品化处理生产线新建项目可行性研究报告
- 铅酸蓄电池技改项目可行性报告
- 如何写一封色差地砖协议书范文
- DB11-972-2013保险营业场所风险等级与安全防范要求
- 高中政治部编版教材高考双向细目表
- 轮扣式模板支撑架安全专项施工方案
- 酒店装饰装修工程验收表
- 中国行业分类代码表
- 社会组织协会换届选举会议主持词
- 呼吸科(呼吸与危重症医学科)出科理论试题及答案
- 清新个人工作述职报告PPT模板
- 公路工程通用(专用)合同条款汇编.
- 工程施工现场及常用对话场景英语集锦
- 肺癌的靶向治疗法PPT课件.ppt
评论
0/150
提交评论