matlab3程序设计.ppt
《matlab3程序设计.ppt》由会员分享,可在线阅读,更多相关《matlab3程序设计.ppt(83页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第三章 MATLAB程序设计一、matlab的工作模式1、指令驱动模式 通常matlab以指令驱动模式工作即在matlab 窗口下,当用户输入单行指令时,matlab 立即处理这条指令,并显示结果,这就是matlab命令行方式。命令行操作时,matlab窗口只允许一次执行一行上的一个或几个语句。x1=0:10,x2=0:3:11,x3=11.5:-3:0 x1=0 1 2 3 4 5 6 7 8 9 10 x2=0 3 6 9x3=11.5000 8.5000 5.5000 2.5000在matlab窗口输入数据和命令进行计算时,当处理复杂问题和大量数据时是不方便的。因此应编辑m文件。2.m文
2、件 m文件的语法类似于c语言,但有自身特点。它只是一个简单的ASCII码文本文件,执行程序时逐行解释运行程序。matlab是解释性的编程语言。m文件有两类独立的m文件 称程序文件 可调用m文件 称函数文件(1).程序文件 简单的m文件 程序文件实际上是一串指令的集合,与在命令窗口逐行执行文件中的所有指令,其结果是一样的。没有输入输出参数。(2).matlab内置函数文件 matlab自定义的函数文件称内置函数文件 调用内置函数的方法:使用函数名并给出相应的入口、出口参数即可。例如:sin.m函数用type sin查不到。调用格式:y=sin(2*x)实际应用中:x=0:2*pi/180:2*p
3、i;y=sin(2*x)plot(x,y)(3).函数m文件 需要输入变量,返回输出变量 matlab用户可以根据需要编辑自己的m文件,它们可以像库函数一样方便的调用,从而极大地扩展了matlab 的能力。各种工具箱的内部函数基本都是M函数文件,用户也可以自己编写一组M函数文件组成工具箱对于某一类特殊问题,如创建了许多m函数文件,则可形成新的工具箱。这种用matlab语言创建定义新的matlab函数的功能,正体现了matlab语言强大的扩展功能。二、二、文本编辑窗文本编辑窗MATLAB文本编辑器的功能就是完成编写、修改和调试这种文件程序就要用到M文件编辑器/调试器。文本编辑器/调试器的启动可以
4、从命令窗口中或当前目录窗口中选择新建或打开文件按钮进入,或在命令窗口中键入:edit(回车)。其编辑模式如下图所示。在文本编辑器中,文字的不同颜色显示表明文字的不同属性。绿色:注解;黑色:程序主体;红色:属性值的设定;蓝色:控制流程。编辑功能与大多数编辑器类似,都有复制、粘贴、查找、加注释、缩进等功能具有程序调试功能:设置断点、单步执行、连续执行等在运行程序之前,必须设置好MATLAB的工作路径,使得所要运行的程序及运行程序所需要的其他文件处在当前目录之下,只有这样,才可以使程序得以正常运行。否则可能导致无法读取某些系统文件或数据,从而程序无法执行。文本编辑器的相关菜单功能:文本编辑器的相关菜
5、单功能:Save and Run:保存并运行程序,直到遇到下一个断点。对应工具按钮为 。Single Step:单步执行。对应工具按钮为 。Step In:运行当前程序行,如果当前行调用了另外一个函数,则跳转到这个函数里。对应的工具按钮为 。Exit Debug Mode:退出调试模式。工具按钮为 。Set/Clear Breakpoint:设置/清除断点。Clear All Breakpoints:清除所有的断点。文本编辑器的参数设置文本编辑器的参数设置 三、MATLBA程序的基本设计原则1、后面的内容是程序的注解,要善于运用注解使程序更具可读性。2、养成在主程序开头用clear指令清除变量
6、的习惯,以消除工作空间中其他变量对程序运行的影响。但注意在子程序中不要用clear。3、参数值要集中放在程序的开始部分,以便维护。要充分利用MATLAB工具箱提供的指令来执行所要进行的运算,在语句行之后输入分号使其及中间结果不在屏幕上显示,以提高执行速度。4、input指令可以用来输入一些临时的数据;而对于大量参数,则通过建立一个存储参数的子程序,在主程序中用子程序的名称来调用。5、程序尽量模块化,也就是采用主程序调用子程序的方法,将所有子程序合并在一起来执行全部的操作。6、充分利用Debugger来进行程序的调试(设置断点、单步执行、连续执行),并利用其他工具箱或图形用户界面(GUI)的设计
7、技巧,将设计结果集成到一起。7、设置好MATLAB的工作路径,以便程序运行。8、MATLAB程序的基本组成结构说明清除命令:清除workspace中的变量和图形(clear,close)定义变量:包括全局变量的声明及参数值的设定逐行执行命令:指MATLAB提供的运算指令或工具箱 提供的专用命令控制循环 :包含for,if then,switch,while等语句 逐行执行命令 绘图命令:将运算结果绘制出来M M程序文件以.m格式进行存取,包含一连串的MATLAB指令和必要的注释。M程序文件中的命令格式和前后位置,与在命令窗口中输入的没有任何区别。需要在工作空间中创建并获取变量,也就是说处理的数
8、据为命令窗口中的数据,没有输入参数,也不会返回参数。程序运行时只需在工作空间中键入其名称即可。使用help xxx时将返回程序开始处的注释信息四、M程序文件命令文件包括两部分:注释文件和程序文件%二阶系统时域响应曲线%阻尼系数为0.3x=0:0.1:20;y=1-1/sqrt(1-0.32)*exp(-0.3*x).*sin(sqrt(1-0.32)*x+acos(0.3);plot(x,y)程序部分画出分段函数所表示的曲面:画出分段函数所表示的曲面:%This is a example.a=2;b=2;clf;%CLF Clear current figurex=-a:0.2:a;y=-b:
9、0.2:b;for i=1:length(y)for j=1:length(x)if x(j)+y(i)1 z(i,j)=0.5457*exp(-0.75*y(i)2-3.75*x(j)2-1.5*x(j);elseif x(j)+y(i)a=1;b=3;c=1;x1 x2=FindRoots(a,b,c)function x1 x2=FindRoots(a,b,c)%a*x2+b*x+c=0 x1=(-b+(b2-4*a*c)0.5)/(2*a);x2=(-b-(b2-4*a*c)0.5)/(2*a);q 函数调用的一般格式输出实参列表=函数名(输入实参列表)u 函数调用时,实参的顺序应与函
10、数定义时的形参的顺序一致。函数调用function y=dfw1(r,p)函数定义形参z=dfw1(x,k)实参1、nargin函数体内获取实际输入变量的个数2、nargout 函数体内获取实际输出变量的个数3、nargin(fun)函数体外获取定义输入变量数4、nargout(fun)函数体外获取实际输出变量数5、varargin获得输入变量的各元素内容6、varargout获得输出变量的各元素内容见文件 mysum.m MATLAB在函数调用上有一个与众不同之处在函数调用上有一个与众不同之处:函数:函数所传递的参数具有可调性所传递的参数具有可调性。函数文件函数文件examp.m:funct
11、ion fout=examp(a,b,c)if nargin=1 fout=a;elseif nargin=2 fout=a+b;elseif nargin=3 fout=(a*b*c)/2;end程序文件程序文件mydemo.m:x=1:3;y=1;2;3;examp(x)examp(x,y)examp(x,y,3)q 函数通过输入和输出参数与其它 M 文件进行数据传递。q 当函数调用完毕后,该函数文件中定义的所有局部变量都将被释放,即全部被清除。q 函数文件中的变量都是局部的,即一个函数文件中定义的变量不能被另一个函数文件或其它 M 文件使用。(2)局部变量q 函数文件运行时,matlab
12、会专门开辟一个临时工作区间,称为函数工作区间。q 如果在M函数中,调用某个M程序文件,那么该程序文件运行时产生的所有变量都存放于该函数空间中,而不是存放在Matlab空间。变量名列表中的各个变量用空格隔开,不能用逗号!全局变量给函数间的数据传递带来了方便,但却破坏了函数对变量的封装,降低了程序的可读性,因而在结构化程序设计中,全局变量是不受欢迎的。特别是当程序较大,子程序较多时,全局变量将个程序调试和维护带来不便,故不提倡使用全局变量。global 变量名列表(3)全局变量q 如果在若干个 M文件中,都把某个变量定义为全局变量,则这些函数将公共使用这一变量。所有函数都可以对它进行存取和修改操作
13、。global a b c a=18.3036b=3816.44c=-46.13for i=1:11 t=373.2+10*(i-1)psat(i)=antoine(t)end%函數:Antoine.m function p_vap=antoine(t)global a b cp_vap=exp(a-b/(t+c)function num1,num2,num3=test3(varargin)global firstlevel secondlevelnum1=0;num2=0;num3=0;list=zeros(nargin);for i=1:nargin list(i)=sum(varargi
14、ni(:);list(i)=list(i)/length(varargini);if list(i)firstlevel num1=num1+1;elseif list(i)secondlevel num2=num2+1;else num3=num3+1;endend?global firstlevel secondlevel?firstlevel=85;?secondlevel=75;?a,b,c=test3(90,89,60,79,89,60,99,98,100)a=1b=2c=0(4)子函数u 函数文件中可以含有一个或多个子函数u 子函数由 function 语句引导u 主函数必须位于最
15、前面,子函数出现的次序任意u 子函数只能被主函数和位于同一个函数文件中的其它子函数调用u 除了用 global 定义的全局变量外,子函数中的变量都是局部变量,子函数与主函数及其它子函数之间通过输入、输出参数进行数据传递u主函数与子函数的工作空间相互独立u用help和lookfor命令不能提供子函数的帮助信息function test()%注释注释tt(0.3);hold on;tt(0.5);tt(0.707);function y=tt(zeta)%二阶系统时域响应曲线二阶系统时域响应曲线%zeta 阻尼系数阻尼系数x=0:0.1:20;y=1-1/sqrt(1-zeta2)*exp(-ze
16、ta*x).*sin(sqrt(1-zeta2)*x+acos(zeta);plot(x,y)function avg,med=main_fun(x)%主函数主函数 n=length(x);avg=sub_fun1(x,n);med=sub_fun2(x,n);function a=sub_fun1(x,n)%子函数子函数a=sum(x)/n;function m=sub_fun2(x,n)%子函数子函数x=sort(x);if rem(n,2)=1 m=x(n+1)/2);else m=(x(n/2)+x(n/2+1)/2;endMATLAB的搜索过程matlab在一个文件中碰到指令cow时
17、:(1)检查cow是否变量(2)检查cow是否内建函数(3)检查cow是否子函数(4)检查cow是否私用函数(私用函数指位于private目录上的M文件函数。私用函数只能被private目录的直接父目录上的M函数文件所调用)(5)检查cow是否当前目录上的文件(先找.p,再找.m)(6)检查搜索路径上是否有cow六、程序流程结构(一)M-文件中输入、输出命令命令 直接赋值输入:提示对话输入(input命令)x=2;x=input(请输入参数 x=);a=1,2;3,4;a=input(请输入矩阵 a=);s=any string!;s=input(Please input s=,s);直接输出
18、:格式控制输出(fprintf命令)x fprintf(x=%.0f,y=%.5fn,pi,pi);disp(a,b);fprintf(x=%5g,y=%10.5gn,N,pi);例:输入一个人的姓名:xm=input(Whats your name:,s)例:求一元二次方程a2+bx+c=0的根。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)将该程序以aa.m文件存盘,然后运行aa.m文件。keyboard:停止程序执行,把控制权交给键盘。输入return并回车后
19、继续程序执行。return:结束函数执行,返回主程序 若想强行终止程序或中断死循环,按下Ctrl-C键 pause函数:函数:暂停程序的执行。调用格式:pause(延迟秒数)注:如果省略延迟时间,直接使用pause,则将暂停程序,直到用户按任一键后程序继续执行。(二)选择结构选择结构的语句有if语句和switch语句。1 if语句语句 格式一:if 条件 语句组 end格式二:if 条件 语句组1 else 语句组2 end格式三:if 条件1 语句组1 elseif 条件2 语句组2 elseif 条件m 语句组m else 语句组m+1 end例 输入三角形的三条边,求面积。A=input
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matlab3 程序设计
限制150内