1、数学建模数学建模MATLAB基础知识基础知识第1页主要内容主要内容一一.MATLAB介绍介绍二二.MATLAB数值计算功效数值计算功效四四.MATLAB程序设计程序设计三三.MATLAB符号运算功效符号运算功效五五.MATLAB基本图形处理功效基本图形处理功效第2页一一.MATLAB介绍介绍1、MATLAB优点MATLAB被誉为“巨人肩上工具”。因为使用Matlab编程运算与人进行科学计算思绪和表示方式完全一致,所以不像学习其它高级语言-如Basic、Fortran和C等那样难于掌握,用Matlab编写程序如同在演算纸上排列出公式与求解问题,所以又被称为演算纸式科学算法语言演算纸式科学算法语言
2、。语言简单语言简单MATLAB含义是矩阵试验室(MATRIX LABORATORY),主要用于方便矩阵存取,其基本元素是无须定义维数矩阵。MATLAB自问世以来,就是以数值计算称雄。MATLAB进行数值计算基本单位是复数数组(或称阵列)复数数组(或称阵列),这使MATLAB高度“向量化”。因为它不需定义数组维数,并给出矩阵函数、特殊矩阵专门库函数,使之在求解诸如信号处理、建模、系统识别、控制、优化等领域问题时,显得大为简捷、高效、方便,这是其它高级语言所不能比拟。编程轻易,效编程轻易,效率高率高第3页MATLAB中包含了被称作工具箱(TOOLBOX)各类应用问题求解工具。包含信号处理、图象处理
3、、控制系统辨识、神经网络等。功效强大功效强大MATLAB5.3以后版本中包含了图形界面编辑GUI,改变了以前单一“在指令窗经过文本形指令进行各种操作”情况。操作方便操作方便2、MATLAB环境(1)MATLAB桌面平台MATLAB桌面平台主要包含以下工具(见Figure1-1)命令窗口命令历史窗口当前目录窗口演示工具工作间管理窗口开启菜单经过新建命令还能够打开M文件编辑窗口、图形窗口、建模窗口、GUI窗口和布署项目(Deployment Project)窗口。第4页Figure1-1 MATLAB桌面平台当前目录窗口工作间管理窗口命令窗口命令历史窗口演示工具开启菜单第5页(2)MATLAB帮助
4、系统有三种方式取得MATLAB帮助:经过使用帮助浏览器(Figure1-2)命令窗口help系列。使用方式是在命令行输入help,help+函数名,Helpwin或者helpdesk。Figure1-2 帮助浏览器使用lookfor函数。若要查找一个不知其确切名称函数名时使用。其它惯用查询辅助命令:lexist 变量检验函数,检验变量是否存在。lwhat 目录汉字件列表lwho 内存变量列表lwhos 内存变量详细信息lwhich 确定文件位置第6页(3)MATLAB通用命令和技巧命令命令说明说明命令命令说明说明cd显示或更改工作目录hold图形保持开关dir显示目录下文件disp显示变量或文
5、字内容type显示文件内容path显示搜索路径clear清理内存变量save保留内存变量到指定文件clf去除图形窗口load加载指定文件变量pack搜集内存碎片diary日志文件命令clc去除工作窗quit退出MATLABecho工作窗信息显示开关标点标点定义定义标点标点定义定义:含有各种应用功效.域访问符等;区分行及取消运行显示等续行符,区分列及函数参数分隔符%注释标识()指定运算过程先后次序字符串标示符 矩阵定义标志等!调用DOS 组成单元数组等=赋值运算符第7页(4)MATLAB搜索路径与扩展搜索路径对话框。菜单中File/Set Path(见图Figure1-3)path命令。比如:p
6、ath(path,G:my matlab examples)genpath命令。editpath或pathtool命令。见图Figure1-3 addpath命令扩展目录。比如:addpath e:my files end(-begin);Figure1-3 路径设置 第8页二二.MATLAB数值计算功效数值计算功效1、变量MATLAB程序中基本数据单元称为阵列(Array),是一个分为行与列数据集合。变量被看做是只有一行一列阵列。MATLAB语言不需要对变量进行事先申明,也不需要指定变量类型,它会自动依据所赋予变量值或对变量所进行操作来确定变量类型。其命名规则为:(1)变量名大小写是敏感。(
7、2)变量第一个字符必须为英文字母,而且不能超出31个字符。(3)变量名能够包含下划线、数字,但不能为空格符、标点。(4)命名变量时能够取一个轻易记忆而且能表示出其含义名称,如汇率,能够定义为exchange_rate。对于变量作用域,默认情况是局部变量,使用global定义全局变量,而且全局变量惯用大写英文字母表示。MATLAB预定义变量以下表所表示:第9页ans预设计算结果变量名epsMATLAB定义正极小值=2.2204e-16pi内建值inf值,无限大 NaN无法定义一个数目i 或 j虚数单位i=j=-1nargin函数输入参数个数nargout函数输出参数个数realmax最大正实数
8、21023realmin最小正实数2-1022flops浮点运算次数在定义变量时要尽可能与防止与这些名字相同,以免改变它们值,假如已经改变,能够经过clear+变量名 来恢复它初始值,也能够经过重新开启MATLAB恢复这些值。2、数字变量(1)演算纸式科学计算方式。输入数字运算表示式然后回车即可。(2)数字输入输出格式。全部数据均按IEEE浮点标准长型格式存放。输入格式沿用了C语言格调和规则;输出格式使用 format+数据格式 命令控制,只影响在屏幕上显示结果,不影响内部存放和运算。第10页3、字符串u使用单引号设定后输入或赋值。如:s=matrix laboratory,字符串每个字符(包
9、含空格)都是字符数组一个元素,能够使用size(变量名)查看字符数组维数。u在MATLAB中,字符串与字符数组(矩阵)基本上是等价,都是以阵列形式存放。u函数char用来生成字符数组(矩阵)如:s=char(M,A,T,L,A,B);u函数double能够将字符串转化为数值代码(ASCII码),函数cellstr将字符数组转化为字符串。u数值数组和字符串之间转换函数以下表所表示:函数名函数名功效函数名函数名功效num2str数字转化为字符串str2num转换字符串为数字int2str整数转化为字符串sprintf将格式数据写为字符串mat2str矩阵转化为字符串sscanf在格式控制下读字符串
10、第11页u字符串操作函数以下表所表示:函数名函数名功效函数名函数名功效strcat链接串strrep以其它串代替此串strvcat垂直链接串strtok寻找串中记号strcmp比较串upper大写转化strncmp比较前n个字符lower小写转化findstr在其它串中找此串blanks生成空串strjust证实字符数组deblank移去串内空格strmatch查找可能匹配字符串ischar字符串检验iscellstr字符串单元阵检验isletter字母检验isspace空格检验hex2num十六进制转双精度数值hex2dec十六进制转十进制dec2hex十进制转十六进制bin2dec二进制转
11、十进制dec2bin十进制转二进制base2dec转换B底字符串为十进制dec2base十进制整数转为B底串stringsstrings函数帮助u用eval函数实现字符串执行功效。如:eval(M num2str(1)=magic(5)第12页4、单元型变量(cell arrays)(1)单元型变量定义。两种方法:赋值语句和cell函数。比如:A=1 3-7;2 0 8;0 5 1,This is a text string,1:4。赋值时还能够采取直接对单元型变量中元素直接赋值方法,实现方式是用cell函数预先分配存放空间,A=cell(1,3),建立一个一行三列单元型变量。单元型变量是一个
12、以任意形式数组为元素多维数组。单元型变量引用能够使用大括号作为下标标示(显示全部内容)和小括号作为下标标示(显示压缩形式)。(2)相关函数函数函数功效函数函数功效cell生成单元型变量deal输入输出处理cellfun对单元型变量中元素作用函数cell2struct单元型变量转为结构型变量celldisp显示单元型变量内容struct2cell结构型变量转为单元型变量cellplot图形显示单元型变量内容iscell是否为单元型变量num2cell将数值数组转为单元型变量reshape改变单元数组结构第13页5、结构型变量(1)结构型变量类似C语言中结构体,它和单元型变量区分在于结构型变量是以
13、指针方式来传递数据,而且每一个元素都有一个独立名字。两种定义方式,直接赋值定义和由函数struct定义。结构型变量名=struct(元素名1,元素值1,元素名2,元素值2,)比如:student.name=John;student.addr=123 Main Street;student.city=ZB;%建立一个名为student结构型变量(2)相关函数函数函数功效函数函数功效struct生成结构型变量rmfield删除属性fieldnames得到属性名isfield判断是否为结构型变量属性getfield得到属性值isstruct判断是否为结构型变量setfield设定属性值第14页6、向
14、量及其运算(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)第15页7、矩阵及其运算(1)矩阵生成命令窗口直接输入,使用,元素之间用空格、逗号或者分号(行与行之间分隔符)隔开。
15、创建M文件输入大矩阵。(2)基本运算矩阵四则运算。其中乘法运算要注意相乘双方有相邻公共维,除法分为左除“”和右除”/”(需要计算逆矩阵)矩阵逆运算。Inv函数。矩阵幂运算。矩阵指数运算。expm、expm1、expm2、expm3矩阵对数运算。logm矩阵特征值函数。eig和eigs矩阵奇异值函数。svd和svds矩阵条件数函数。cond,condest,rcond第16页特征值条件数函数。codeig范数函数。norm,normest其它还有秩函数rank,迹函数trace,零空间函数null,正交空间函数orth,伪逆函数pinv等(3)矩阵分解函数特征值分解,v,d=eig(X),v,d
16、=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函数第17页(4)特殊矩阵空阵,能够用clear从内存中去除全0阵 zeros,单位阵eye,全1阵ones,随机阵rand/randn其它特殊矩阵 见下表函数函数功效函数函数功效compan伴随阵magic魔方阵galleryHigham测试阵rosser经典对称特征值测试阵hadamardHardamard矩阵toeplitzToe
17、plitz矩阵hankelHankel矩阵pascalPascal矩阵hilbHilbert矩阵vander范德蒙矩阵invhilb反Hilbert矩阵wilkinsonWilkinsons特征值测试矩阵(5)矩阵一些特殊操作变维。有两种方法,使用冒号(:)和使用函数reshape第18页使用“:”表示式对两个矩阵进行变维操作,需要预先定义两个矩阵维数;reshape有两种形式,分别为reshape(X,M,N)和reshape(X,M,N,P)变向 主要函数以下表所表示:函数函数功效函数函数功效fiplr矩阵左右翻转diag产生或提取对角阵fipud矩阵上下翻转tril产生下三角fipdim
18、矩阵特定维翻转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;利用小矩阵组合生成大矩阵,要严格注意矩阵大小匹配。第19页7、数组及其运算(1)基本数组运算同型矩阵之间运算通常称为数组运算。(矩阵数组运算)四则运算。数组乘除
19、法是指两个同维数组间对应元素之间乘除法,运算符为”.*”,”./”和”.”。数组与常数之间运算能够加”.”,也能够不加。幂运算。.,对每个数组元素幂运算。指数运算exp,对数运算log和开方运算sqrt。(2)数组函数运算只要把运算数组带入到函数中就能够了,通用形式为funname(A)(3)逻辑运算基本逻辑运算。参见下一页表格逻辑关系函数运算。参见下一页表格第20页指令含义函数名 小于lt=大于gt=大于等于ge=等于eq=不等于ne&逻辑 与and|逻辑 或or 逻辑 非not指令含义指令含义xor不相同就取1,不然取0isequal相等取1,不然取0any只要有非0就取1,不然取0ism
20、ember两个矩阵是属于关系取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判断逻辑数组第21页8、多项式运算(1)多项式表示方法转化为向量问题对于多项式用下面行向量表示:系数向
21、量直接输入法,MATLAB自动将向量元素按降幂次序分配给各系数值。函数poly2sym能够将向量表示多项式转化为符号多项式表示。特征多项式输入法,从矩阵求其特征多项式取得,由函数poly实现。注:由特征多项式生成多项式首项系数一定为1;n阶矩阵普通产生n次多项式。由根创建多项式,由函数poly实现。注:若要生成实系数多项式,则根中复数必定对应共轭;生成多项式向量包含很小虚部时可用real命令将其过滤掉。(2)多项式运算多项式求值。输入变量值代入多项式计算时以数组为单元使用函数polyval;以矩阵(必须为方阵)为计算单元求多项式值用函数polyvalm;第22页多项式求根。两种方法,一个是调用
22、函数roots,另一个是经过建立多项式伴随矩阵再求其特征值方法得到多项式全部根。(使用compan和eig函数)多项式乘除法运算。乘法使用函数conv(向量卷积),除法使用函数deconv多项式微分。微分函数polyder多项式拟合。两种方法,一个是由矩阵除法求解超定方程来进行,另一个是用拟合函数polyfit,调用方式为polyfit(X,Y,n)和p,s=polyfit(X,Y,n)第23页三三.MATLAB符号运算功效符号运算功效早期MATLAB不具备符号运算功效,在1993年Mathworks企业从加拿大滑铁卢大学购置了Maple使用权,并在此基础上,利用Maple函数库,开发了符号计
23、算工具箱(Symbolic Toolbox),从此MATLAB便具备了数值计算、符号计算和图形处理三大基本功效于一身,称为在数学计算领域功效最强语言。MATLAB实现符号计算功效主要有三种路径:调用MATLAB开发各种功效函数进行惯用符号运算,如符号表示式和符号矩阵基本操作,符号矩阵运算,符号微积分,符号线性方程求解,符号微分方程求解,特殊数学符号函数以及符号函数图形等。经过使用函数maple.m和mpa.m与Maple接口,给一些特殊专业人员提供方便。符号函数计算器(Function Calculator)功效。第24页1、符号表示式生成符号表示式包含符号函数和符号方程,区分在于是否带有等号
24、。只要在表示式两端添加分号()就能够创建一个符号函数或者符号方程,比如:f=log(x),g=a*x2+b*x+c=0,也能够用函数sym或syms创建,如f=sym(cos(x),f=sym(sin(x)2=0);syms x;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函数,s
25、ubs(S,OLD,NEW)numeric函数,n=numeric(S)将不含自由变量符号表示式转换为数值形式,效果等同于n=double(sym(S)第25页3、符号函数运算(1)复合函数运算。compose函数,其调用形式以下:pcompose(f,g)返回f(g(y)pcompose(f,g,z)返回以z为自变量复合函数pcompose(f,g,x,z)返回f(g(z),且使得x为f独立变量pcompose(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(
26、z/u)/t);compose(f,g,x,u,z)返回cos(sin(y/z)/t)。(2)反函数运算。finverse函数,调用形式为:pg=finverse(f)pg=finverse(f,v)返回符号函数表示式自变量为符号v,当f包含不止一个变量时最好使用此型。第26页4、符号矩阵创建(1)使用sym函数直接创建符号矩阵。同直接创建数值矩阵相同(2)用创建子阵方法创建符号矩阵。要确保同一列各元素字符串含有相同长度要确保同一列各元素字符串含有相同长度(3)将数值矩阵转化为符号矩阵。sym(4)符号矩阵索引和修改。同数值矩阵相同5、符号矩阵运算(1)基本运算。包含加(+)、减(-)、乘(*
27、)、除(/,)、转置()(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)-有理基。第27页(9)符号矩阵简化。因式分解factor(S),大整数分解factor(sym(N);展开expand(S);同类式
28、合并collect(S)合并同类项,collect(S,v)合并v同幂项;符号简化simple(S),simplify(S)-简化符号矩阵每一个元素。分式通分horner-秦九韶型多项式表示式函数(一个嵌套形式,能够降低乘法计算次数)6、符号微积分(1)符号极限。limit函数,调用形式有:limit(F,x,a)F在xa条件下极限值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)对自变
29、量v不定积分int(S,a,b)计算从a到b定积分,a,b为双精度或符号数量int(S,v,a,b)计算对变量v从a到b定积分第28页(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作为各方向点间隔
30、,FX,FY=gradient(F,HX,HY),FX,FY,FZ=gradient(F),FX,FY,FZ=gradient(F,HX,HY,HZ)。多元函数导数。jacobian(f,v),计算数量或向量f对向量vJacobi矩阵,当f为数量时函数返回f梯度。第29页7、符号代数方程求解(1)线性方程组求解,函数linsolve,solve,能够得到方程准确解(2)非线性方程符号解法,使用函数fsolve,调用格式有:X=fsolve(fun,X0)X=fsolve(fun,X0,options)options为选择参数输入向量X=fsolve(fun,X0,options,gradfun
31、),gradfun为输入函数在X处偏导数X=fsolve(fun,X0,options,gradfun,P1,P2,)P1,P2为问题定性参数X,options=fsolve(fun,X0,)返回使用优化方法参数注:复杂符号函数能够在M文件中创建8、符号微分方程求解带微分方程符号解,使用函数dsolve第30页9、符号函数二维图(1)符号函数简易绘图函数ezplot(f),ezplot(f,xmin,xmax),ezplot(f,xmin,xmax,fig)(2)绘制函数图函数fplot,调用格式有:fplot(fun,lims)绘制由字符串fun指定函数名函数在x轴区间lims=xmin x
32、max函数图,fun必须为一个m文件函数名或对变量x可执行字符串。fplot(fun,lims,tol)tol=1指定以最少n+1个点来绘制图形,默认n=1。fplot(fun,lims,LineSpec)以指定线型绘制图形x,y=fplot(fun,lims,)只返回用来绘图点向量值,不绘出图形。第31页10、图示化函数计算器(funtool)第32页四四.MATLAB程序设计程序设计用MATLAB语言编写程序,称为M文件。M文件有两类:命令式文件和函数式文件。命令式文件命令式文件:命令行简单叠加,没有输入参数,也不返回输出参数。它调用MATLAB工作域内全部数据,而且产生全部变量都是全局变
33、量,需要用clear或quit去除。函数式文件函数式文件:处理参数传递和函数调用问题,有输入参数,可返回输出参数。第一句必须以function语句为引导。其中变量除了特殊申明外均为局部变量。编写函数式文件注意事项:(1)文件名和函数名保持一致。(2)function后语句定义函数和输入输出参数在函数被调用过程中将按此输入输出格式执行。(3)要养成良好注释习惯。(4)善于将比较大任务分解成轻易处理子任务。函数式文件形式以下:第33页function outarg1,outarg2,=fname(inarg1,inarg2,)%H1 comment line%Other comment lines
34、executable code.(return)1、控制语句(1)循环语句for循环。特点是其循环判断条件是对循环次数判断,即要预先设定好循环次数。for v=expression statementsend expression 表示为m:n或者m:i:n第34页注:for循环一定要有end作为结束标志。循环语句中能够使用分号;预防出现中间结果。循环语句书写要有层次,增加可读性。假如m或n有小于1值,结构上正当不过不运行,对于缺乏元素系统会自动添加。循环语句比较耗时,能不用循环地方要尽可能防止使用。比如:向量t=-1 0 1 3 5,由此生成一个范德蒙矩阵n=max(size(t);for
35、jj=1:n for ii=1:n a(ii,jj)=t(ii)(n-jj);endendn=max(size(t);a(:,n)=ones(n,1);for jj=n-1:-1:n a(:,jj)=t.*a(:,jj+1);end第35页while循环。判断控制能够是一个逻辑判断语句,适用性愈加广泛。格式为:while(expression)statements;end假如expression为非零值(真),statements重复执行直到expression为假。(2)选择语句if-elseif-else-end 其执行步骤以下:u判断表示式紧跟在关键字if后面,首先被计算。u若计算结果为
36、0,判断值为假,若为1,则判断值为真u若判断值为真,则执行其后语句,不然跳过。if语句有下面三种格式:第36页 格式一:if 条件 语句组 end格式二:if 条件 语句组1 else 语句组2 end格式三:if 条件1 语句组1 elseif 条件2 语句组2 elseif 条件m 语句组m else 语句组m+1 end switch-case-otherwise语句 格式为switch 表示式 case 值1 语句组1 case 值2语句组2 case 值m 语句组m otherwise 语句组m+1 end第37页2、人机交互语句(1)echo命令。echo命令可使文件命令在执行时可
37、见,惯用于命令式文件,有利于程序调试和演示。格式有:echo on/off,echo file on/off,echo file,echo on/off all(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根第38页(3)请求键盘输入命令keyboard当程序碰
38、到此命令时,MATLAB就将暂时停顿运行程序并处于等候键盘输入状态,处理完成后键入“R”程序将继续执行。在M文件中使用此命令有利于调试及程序运行中修改变量。(4)等候用户反应命令pause(延迟秒数)暂停程序执行,等候用户按任意键后继续,在程序调试或看中间结果时很有用。(5)中止命令breakbreak语句惯用于循环语句或条件语句中。(6)命令窗口输出函数disp调用格式:disp(输出项)注:输出项为字符串或矩阵。比如:A=Hello,MATLAB;disp(A)输出为:Hello,MATLABstr=The value of pi=num2str(pi);disp(str);第39页(7)
39、格式化输出函数fprintf使用方法同C语言中printf语句,其调用格式为:fprintf(format,data);比如:fprintf(The value of pi is%f n,pi);3、函数变量及变量作用域1)MATLAB语言中变量主要有输入变量,输出变量和函数内部变量。输入变量相当于函数入口数据,是一个函数操作主要对象,MATLAB提供nargin函数来控制输入变量个数。调用格式一:Function c=test(a,b)if(nargin=1)c=det(a);elseif(nargin=2)c=a+b;end调用格式二:nargin(function)返回函数输入变量个数。
40、第40页2)实现不定数目输入变量函数varargin,对函数一切输入变量将存放在以varargin命名单元型变量中。调用格式:function out1,out2,.=fname(varargin)3)函数inputname,只能在用户定义M文件中使用。调用格式:inputname(inputvarno)inputvarno为输入变量列表中位数,调用该函数后将返回输入变量列表中指定位数变量在工作空间中变量名.与输入变量对应还有输出变量控制函数nargout,vargout,使用方法与输入变量控制函数类似。4、子函数和局部函数在函数定义中开头位置定义函数为主函数,而在函数体内定义其它函数为子函数
41、,子函数只能为主函数或同一主函数下其它子函数所调用。MATLAB语言把放置在目录private下函数称为局部函数,这些函数只能由其父目录中函数调用。第41页5、程序设计中辅助函数1)执行函数函数名函数名说明说明函数名函数名说明说明eval字符串调用builtin外部价在调用内置函数evalc执行Matlab表示式assignin工作空间中分配变量feval字符串调用M文件run运行脚本文件evalin计算工作空间中表示式feval用于调用M文件,该函数识别不出多组输入变量,只能为单组输入变量操作,普通用在以其它函数名为输入变量进行操作函数内,以实现在程序设计中对未知函数操作。调用格式为:y1,
42、y2,.yn=feval(function,x1,x2,.,xn)function能够是内置函数也能够是用户自定义函数。builtin也用来执行函数,不过它执行内置函数。evalin能够对指定工作空间中变量进行操作,调用格式为:evalin(workspacename,expression)assignin用来在指定工作空间中分配变量。第42页2)容错函数error(错误信息)中止程序运行,显示错误信息。warning(错误信息)不中止程序执行,只给出警告信息。try 语句段1 catch 语句段2 end 错误捕捉lasterr,lastwarn,errortrap on/off等函数3)时
43、间函数函数名函数名说明说明函数名函数名说明说明now数值型显示当前时间日期datevec转化为向量形式显示日期date字符型显示当前日期calendar当月日历表clock向量形式显示时间和日期weekday当前日期对应星期表示datenum转化为数值型格式显示日期eomday给出指定年月当月最终一天datestr转化为字符型格式显示日期datetick指定坐标轴日期表示式cputime以CPU时间方式计时tic toc计时开关函数etime计算两个时刻时间表t=cputime;需要计时程序段;t=cputime-t;tic;需要计时程序段;toc;t0=clock;需要计时程序段;etime
44、(clock,t0)第43页6、程序设计优化(1)以矩阵作为操作主体循环运算是MATLAB语言最大弱点,程序设计中要尽可能防止使用循环,绝大多数循环运算能够转换为向量运算。(2)数据预定义即使MATLAB语言没有要求变量使用时必须预先定义,不过对于未定义变量,假如操作过程中出现越界赋值时,系统将不得不对变量进行扩充,这大大降低了程序运行效率。比如:function c=test1for ii=1:50 c(ii)=det(pascal(ii);endfunction c=test2c=zeros(50,1);for ii=1:50 c(ii)=det(pascal(ii);endt=0.124
45、126st=0.006310s第44页(2)内存管理函数名函数名说明说明函数名函数名说明说明clear从内存中去除变量及函数pack重新分配内存quit退出MATLABsave把指定变量存到磁盘load从磁盘调出指定变量pack函数在一定程度上能够处理out of memory错误,该函数将把内存中全部使用变量暂存入磁盘,然后再用内存中连续空间存放这些变量。7、程序调试(1)M文件错误种类。分语法错误和执行错误两种。语法错误发生在M文件程序代码解释过程中,普通是由函数参数输入类型有误或者矩阵运算阶数不符等引发。执行错误发生是因为在程序运行过程中,出现溢出或死循环等引发,由程序本身引发,较难发觉
46、处理。第45页(2)错误识别将程序每一步执行结果输出到命令窗口,检验运行中间结果,实现方法能够去掉分号,也能够添加断点。使用keyboard函数中止程序。一些情况下能够注释掉函数头,变为脚本文件执行。使用MATLAB调试功效。(3)调试过程dbstop用来在M文件中设置断点,dbstop in at dbstatus显示断点信息dbtype显示M文件文本dbstep从断点处继续执行M文件dbstack显示M文件执行时调用堆栈dbup/dbdown实现工作空间切换dbquit 退出函数调试状态第46页8、M文件调用统计(1)profile函数,调用格式:经过统计M文件调用过程能够分析执行过程中各
47、函数耗时情况,由此能够了解文件执行过程中瓶颈问题。profile s=profile(status)显示当前调用状态stats=profile(info)中止调用并返回统计结果(2)调用统计结果显示profile report test_eig 将统计输出到test_eig.html文件中。profile plot 将调用统计结果显示为条状图9、函数句柄函数句柄用来保留函数相关信息,尤其是关于函数执行信息,有以下优点:能够方便实现函数间相互调用。能够取得函数加载全部方式。第47页拓宽子函数以及局部函数使用范围。能够提升函数调用过程中可靠性。能够降低程序设计冗余。能够提升重复执行效率。函数句柄能
48、够与数组、结构型数组以及单元型数组结合定义数据。(1)函数句柄创建和显示经过引导函数名即可创建对应函数句柄。如:fun_handle=load函数句柄内容能够经过函数functions(函数句柄)来显示。函数句柄实际是一个结构型数组。(2)函数句柄调用和操作经过feval能够进行函数句柄调用,格式为:feval(,参数列表)执行以参数列表为输入变量函数句柄所对应函数。函数句柄与函数名字符串之间能够进行转换,函数为func2str和str2func函数isa能够判断变量是否为函数句柄。函数isequal能够判断两函数句柄是否相同。第48页五五.MATLAB基本图形处理功效基本图形处理功效1、二维
49、图形绘制二维图形最惯用函数是plot,调用格式有以下三种:(1)plot(Y)假如Y为实向量,则以Y索引坐标作为横坐标,以Y本身元素作为纵坐标。假如Y为复数向量,则以该向量实部为横坐标,虚部为纵坐标。y=rand(100,1);plot(y)x=rand(100,1);z=x+y.*i;plot(z)第49页(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);plo
50、t(x,x,y);x=0:0.01*pi:pi;y=sin(x);z=cos(x);plot(x,y,-k,x,z,-.rd);第50页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)grid
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100