MATLAB程序语言设计

上传人:c****d 文档编号:243010934 上传时间:2024-09-13 格式:PPT 页数:34 大小:122KB
返回 下载 相关 举报
MATLAB程序语言设计_第1页
第1页 / 共34页
MATLAB程序语言设计_第2页
第2页 / 共34页
MATLAB程序语言设计_第3页
第3页 / 共34页
点击查看更多>>
资源描述
单击此处编辑母版样式,单击此处编辑幻灯片母版样式,第二层,第三层,第四层,第五层,*,MATLAB程序语言设计,1,第六讲 MATLAB 语言程序设计,6.1 MATLAB语言的函数的基本结构,6.2 全局、局部变量、子函数与私有目录,6.3 MATLAB 函数的跟踪调试,6.4 MATLAB工具箱编写技巧,6.5 MATLAB语言的程序流程语句,6.6 MATLAB中新的数据结构,6.7 MATLAB 语言编程技巧,6.8 例子与习题,2,6.1 MATLAB 语言函数的基本结构,MATLAB语言提供了两种源程序文件格式,M,脚本文件:,它实际上是,MATLAB,命令窗中一系列命令的组合,它没有输入输出参数传递的过程,它直接对工作区中的变量进行处理操作,M,函数:,这是,MATLAB,程序设计的主流,它可以传递参数及返回结果,我们主要介绍,M,函数的编写方法与技巧。,3,6.1 MATLAB 语言函数的基本结构,M函数是由 function 语句引导的,其基本格式如下,function 返回变量列表函数名(输入变量列表),由该符号引导的注释语句段,在MATLAB命令窗,中用命令,help 函数名,所得到的帮助就是这段文字。,输入、返回变量格式的检测,函数体语句,只要进入该函数,MATLAB就自动生成 nargin 和 nargout 两个变量,分别表示输入变量和输出变量的个数。程序中可以根据这两个变量的值来判断用户输入参数的情况。,4,6.1 MATLAB 语言函数的基本结构,M函数典型例子,function magout,phase,w = bode(a,b,c,d,iu,w),%BODE Bode frequency response of LTI models.,% BODE(SYS) draws the Bode plot of the LTI model SYS (created with,% either TF, ZPK, SS, or FRD). The frequency range and number of,% points are chosen automatically.,% See also BODEMAG, NICHOLS, NYQUIST, SIGMA,ni = nargin;,no = nargout;,.,% end bode,5,6.1 MATLAB 语言函数的基本结构,说明,注释符号引导的内容不能含空行,否则,后续的内容不能由,help,命令看到,大部分作者及版权信息都是空行后的注释内容。,当返回变量只有一个时,不用方框号括起来。,函数名与该函数存盘用的文件名要一样,否则,MATLAB,寻找的是文件名符合的函数,而且老版本的,MATLAB,不能用超过,8,个字符的函数名。,6,6.1 MATLAB 语言函数的基本结构,说明(续),可以用,type,函数名,来看函数文件的内容,。,可以用,edit,函数名,来查看或编辑函数文件。,为了使得,MATLAB,认识该函数,要将该函数所在的目录用,cd,命令设为当前目录,或用命令,addpath,添加到,MATLAB,的路径中去(也可以用,MATLAB,菜单下的,PATH,命令)。,7,6.2 全局、局部变量、子函数与私有目录,MATLAB,工作区中的变量和,M,函数内部的变量都是局部变量,他们是互不干扰的,但也可以显性地把变量定义为全局变量,使得他们在整个程序中都起作用。,全局变量定义格式为,global a b c d,注意变量之间不能用逗号分开,在,MATLAB,工作区和,M,函数内部同时要声明该变量为全局变量。,为保证函数的独立性,一般情况下不建议使用全局变量。,8,6.2 全局、局部变量、子函数与私有目录,从,MATLAB 5.0,开始引入子函数。所谓子函数就是一个函数文件中不但包含该函数本身,还包含专门由该函数调用的下一级函数,这样的专门函数称为子函数。子函数是不能有其他文件中的函数调用的。,私有目录即在当前的,MATLAB,目录下建立一个,private,子目录,该目录下的内容只能由当前目录下的函数调用,而不能有其他函数调用。,9,6.3 MATLAB函数的跟踪调试,用,MATLAB,自带的编辑器,EDIT,编辑所要跟踪调试的程序,在希望的语句上设置断点,在,MATLAB,命令窗按正常方式运行命令,程序会自动停留在所设的断点处。,调试状态下,,MATLAB,命令窗的命令提示符变为,K,。,这时可输入任何,MATLAB,命令,变量为函数内部的局部变量,而不是工作区中的变量。,调试状态下,鼠标指针指向想查询的局部变量上将立即能显示出该变量值。,10,6.3 MATLAB函数的跟踪调试,跟踪调试程序中,Debug,菜单下的子菜单项的功能如下表,菜单项,执行结果,Set/Clear Breakpoint,设置或清除断点,Continue,继续执行到下一个断点,Step,单步执行,Step in,单步,若该步调用函数,则在该函数中也单步执行,Exit Debug Mode,退出调试状态,11,6.4 MATLAB工具箱编写技巧,将为,某种专门目的编写一组,MATLAB,函数放在一个目录下,就形成了一个新的工具箱。,为了使得用户能象,MATLAB,提供的工具箱一样使用该工具箱,必须将该工具箱所在的目录用命令,addpath,添加到,MATLAB,的搜索路径中去。,为了能使得命令,help,工具箱名,能列出该工具箱的所有函数的功能介绍,应该按下述格式编写一个名为,contents.m,的文件。第一行给出工具箱名称,第二行给出版本信息,由命令,ver,工具箱名,可以获得该工具箱的版本信息。,一般在该工具箱下还有一文件,readme.m,用来存放有关该工具箱的版本升级信息,使用命令,whatsnew,工具箱名,查看的就是该文件的信息。,12,6.4 MATLAB工具箱编写技巧, type contents.m,% Symbolic Math Toolbox.,% Version 2.1.2 (R12.1) 11-Sep-2000,% New Features.,% Readme - Overview of the new features in/changes made to,% the Symbolic and Extended Symbolic Math Toolboxes.,% Calculus.,% diff - Differentiate.,% Linear Algebra.,% poly - Characteristic polynomial.,% Simplification.,% simplify - Simplify.,% Solution of Equations.,% solve - Symbolic solution of algebraic equations.,% Variable Precision Arithmetic.,% vpa - Variable precision arithmetic.,13,6.5 MATLAB语言的程序流程语句,MATLAB 提供了循环语句结构、条件语句结构、开关语句结构以及试探语句。,for 循环变量 = s1:s2:s3,循环体语句组,end,循环语句结构,for 循环变量 = Vector,循环体语句组,end,14,6.5 MATLAB语言的程序流程语句,例一、,t=0; for i = 1:1:100; t=t+i; end,循环语句结构,例二、,w= 0.1:0.05:1, 1.5:0.5:10, 15:5:100, 150:50:1000;,a=0 1;-1 2; b=0;1; c=1 2; d=0;,m=; I=eye(size(A);,for i=w, m=m; C*inv(sqrt(-1)*I*I-A)*B+D); end,15,6.5 MATLAB语言的程序流程语句,条件语句结构,if 条件式1,条件块语句组1,else,条件块语句组2,end,if 条件式1,条件块语句组1,elseif 条件式2,条件块语句组2,else,条件块语句组n+1,end,16,6.5 MATLAB语言的程序流程语句,条件语句结构,例一,if a=0,a=1;,else,a=-1;,end,例二,if a0,a=1,elseif a student_rec.number=1;, student_rec.name=Ying;, student_rec.height=165;, student_rec.test=100,80,75;77,60,92;67,28,80;100,89,78;, student_rec,student_rec =,number: 1,name: Ying,height: 165,test: 4x3 double,19,6.6 MATLAB中新的数据结构,数据结构体 struct,引用成员变量, student_rec.test,ans = 100 80 75,77 60 92,67 28 80,100 89 78,建立结构体类型的数组, b(50,2)=struct(student_rec),b = 50x2 struct array with fields:,number,name,height,test,20,6.6 MATLAB中新的数据结构,数据结构体 struct,修改结构数值元素的取值,增加结构体成员, b(43,2).number=50+43;, b(43,2).name=Gan;, b(43,2).height=156;, b(43,2).test=83,80,78;97,80,62;90,20,30;30,20,80;, b(1,1).weight=90,b = 50x2 struct array with fields:,number,name,height,test,weight,删除结构体成员, b=rmfield(b,weight),b = 50x2 struct array with fields:,number,name,height,test,21,6.6 MATLAB中新的数据结构,类 class,类不但包含成员变量,还包含成员函数,我们通过一个例子来介绍类的构造,下面建立多项式类。,首先选定一个类的名字,如多项式类我们选为,polynom,。,以这个名字在当前目录下建立一个子目录,而且要加符号,,即建立子目录,polynom,。,该目录无需在,MATLAB,路径下再指定。,22,6.6 MATLAB中新的数据结构,polynom类的数据结构,多项式类只包含一个数据成员即 p.c,它即是多项式系数,幂次从高到底。该成员变量只能被 polynom目录下的成员函数访问。,polynom类的成员函数,构造函数,polynom,.m,多项式到双精度数的转换函数,多项式到字符串的转换函数,显示函数,A,subsref,method,重载运算符,+, -,和,*,重载函数,roots,polyval, plot,和,diff,23,function p = polynom(a),%POLYNOM Polynomial class constructor.,% p = POLYNOM(v) creates a polynomial object from the vector v,% containing the coefficients of descending powers of x.,if nargin = 0,p.c = ;,p = class(p,polynom);,elseif isa(a,polynom),p = a;,else,p.c = a(:).;,p = class(p,polynom);,end,6.6 MATLAB中新的数据结构,polynom类的构造函数 polynom.m, p = polynom(1 0 -2 -5),p = polynom object: 1-by-1,24,6.6 MATLAB中新的数据结构,function c = double(p),% POLYNOM/DOUBLE Convert polynom object to coefficient vector.,% c = DOUBLE(p) converts a polynomial object to the vector c,% containing the coefficients of descending powers of x.,c = p.c;,polynom类的转换函数 double.m,function display(p),% POLYNOM/DISPLAY Command window display of a polynom,disp( );,disp(inputname(1), = ),disp( );,disp( char(p),disp( );,polynom类的显示函数 display.m, double(p),ans = 1 0 -2 -5, display(p),p = x3 - 2*x - 5,25,6.6 MATLAB中新的数据结构,function r = plus(p,q),% POLYNOM/PLUS Implement p + q for polynoms.,p = polynom(p);,q = polynom(q);,k = length(q.c) - length(p.c);,r = polynom(zeros(1,k) p.c + zeros(1,-k) q.c);,polynom类重载运算符 plus.m,function r = mtimes(p,q),% POLYNOM/MTIMES Implement p * q for polynoms.,p = polynom(p);,q = polynom(q);,r = polynom(conv(p.c,q.c);,polynom类重载*运算符 mtimes.m,26,6.6 MATLAB中新的数据结构,单元结构 cell,单元结构类似于数组,但单元结构中各元素可以是不同属性的数据,见下例。,访问单元数据要用带有大括号下标的形式,不能用圆括号。,可以使用,celldisp,函数来直接显示整个单元。,删除第,n,个单元元素用下面命令:,a(n)=;,注意用圆括号。, a=1,Ying,180,magic(3),a = 1 Ying 180 3x3 double, a4,ans = 8 1 6,3 5 7,4 9 2,27,6.6 MATLAB中新的数据结构,单元结构 cell应用,varargin 表示输入变量列表,是一个单元结构变量,varargout 表示输出变量列表,是一个单元结构变量,function a=convs(varargin),a=varargin1;,for i=2:length(varargin),a=conv(a,varargini);,end, p=1 2 4 0 5;q=1 2;f=1 2 3;, g=convs(p,q,f,1 1,1 3,1 4);,g= 1 11 56 176 376 578 678 648 527 315 90,28,6.7 MATLAB语言编程技巧,MATLAB运行机制,MATLAB 语言在函数调用中或文件执行时,如果遇到了某一个名字,则按照下面的优先级顺序对这个名字进行判定。,判定这个名字是否为变量名,判定这个名字是否为本函数内部的子函数,判定这个名字是否为本目录下的私有目录内函数,判定这个名字是否为,MATLAB,的内在函数名,判定这个名字是否为,MATLAB,路径下的,Mex,型,文件,判定这个名字是否为,MATLAB,路径下的,M,函数,MATLAB 搜索路径的顺序是按照其路径设定文件 pathdef.m 中的先后次序来进行的。,29,6.7 MATLAB语言编程技巧,MATLAB运行机制,用户可以用命令 exist 来查询当前的工作区下是否存在一个名字,其调用格式为: i=exist(字符串),例如 i=exist(A);,i=1,,,则表示当前工作区下存在变量,A,i=2,,,则表示,MALTAB,工作路径下存在文件,A.m,i=3,,,则表示,MATLAB,工作路径下存在文件,A.,dll,i=4,,,则表示表示存在,Simulink,文件,A.,mdl,i=5,,,则表示存在内部,MALTAB,函数,A( ),i=6,,,则表示,MATLAB,工作路径下存在伪代码文件,A.p,i=7,,,则表示,MATLAB,工作路径下存在一个,A,子目录,i=0,,,则表示不存在任何和,A,有关的变量和文件,30,6.7 MATLAB语言编程技巧,测定程序执行时间和时间分配,tic 和 toc 是启动和停止秒表, cputime 获取 CPU时间, tic,t=cputime;a=hilb(1000);toc,cputime-t,elapsed_time = 0.7030,ans = 0.7500,M 函数耗时剖析命令,profile,pro,待测函数名,pro,pro,31,6.7 MATLAB语言编程技巧,加快MALTAB程序执行速度的建议,尽量避免使用循环,多重循环情况下,外循环次数要少,大型矩阵要预先定维,优先考虑内在函数,采用有效的算法,应用,Mex,技术,32,6.8 例子与习题,例一、分别用 for 和 while 循环结构编写程序,写出,并考虑一种避免循环的简洁方法来进行求和,并比较各种算法的运行时间。,例二、用循环语句形成一个有20个分量的数组,使其元素满足 Fibonacci 规则。,33,6.8 例子与习题,例三、考虑单元数组 B 的建立,判断下面的语句是否正确,例四、自己编写一个 MATLAB 函数,是它能自动生成一个 mXm 的 Hankel 矩阵,并使其调用格式为 v=h,1, h,2, .h,2n-1,; H=myhankel(v);, B1,1=1;, B1,2=I Am A Student;, B2,1=180;, B2,2=100 80 75;77 60 92;67 68 90;100 89 78;,34,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!