第五章 程序设计基础
CH5 MATLAB程序设计入门
一、MATLBA程序的基本设计原则
1、%后面的内容是程序的注解,要善于运用注解使程序更具可读性。 2、养成在主程序开头用clear指令清除变量的习惯,以消除工作空间中其 他变量对程序运行的影响。但注意在子程序中不要用clear。 3、参数值要集中放在程序的开始部分,以便维护。要充分利用 MATLAB工具箱提供的指令来执行所要进行的运算,在语句行之后输 入分号使其及中间结果不在屏幕上显示,以提高执行速度。 4、input指令可以用来输入一些临时的数据;而对于大量参数,则通过建 立一个存储参数的子程序,在主程序中用子程序的名称来调用。 5、程序尽量模块化,也就是采用主程序调用子程序的方法,将所有子程 序合并在一起来执行全部的操作。 6、充分利用Debugger来进行程序的调试(设置断点、单步执行、连续执 行),并利用其他工具箱或图形用户界面(GUI)的设计技巧,将设 计结果集成到一起。 7、设置好MATLAB的工作路径,以便程序运行。
九、子函数和私有函数
(2) 私有函数 私有函数是private子目录中的函数 私有函数只对父目录中的函数可见 private目录中的只对其上一层目录中的函数调用 private目录中的只对其上一层目录中的函数调用
四、MATLAB的编程技巧 一、函数句柄
任何函数均可创建句柄,句柄用作函数应用的一种方式 其他函数可以使用函数句柄执行对应的函数。 使用@创建函数句柄,@符号放置在函数当前前面 fhandle = @sin;function x = plot_fhandle(fhandle, data) plot(data, fhandle(data)); plot_fhandle(@sin, -pi:0.01:pi)
4、switch语句 格式:switch 表达式(%可以是标量或字符串) case 值1 执行方式:表达式的值和 语句1 哪种情况(case)的值相同,就执 case 值2 行哪种情况中的语句,如果不同, 语句2 则执行otherwise中的语句。格 …. 式中也可以不包括otherwise, otherwise 这时如果表达式的值与列出的各 语句3 种情况都不相同,则继续向下执 end 行。 例exp2_14.m
3、if,else,elseif语句
(1)if 逻辑表达式 执行语句 当逻辑表达式的值为真时,执行该结构中的 执行语句,执行完之后继续向下进行;若为 假,则跳过结构中的内容,向下执行。
end
(2)if 逻辑表达式 (3) if 逻辑表达式1 执行语句1 执行语句1 else elseif 逻辑表达式2 执行语句2 执行语句2 end … end • if-else的执行方式为:如果逻辑表达式的值为真,则执行语句1,然后 跳过语句2,向下执行;如果为假,则执行语句2,然后向下执行。 • if-elseif的执行方式为:如果逻辑表达式1的值为真,则执行语句1;如 果为假,则判断逻辑表达式2,如果为真,则执行语句2,否则向下执 行。 例exp2_13.m exp2_13_.m
七、程序流程控制
1、for循环语句 基本格式 for 循环变量=起始值:步长:终止值 循环体 end • 步长缺省值为1,可以在正实数或负实数范围内任意指定。 对于正数,循环变量的值大于终止值时,循环结束;对于 负数,循环变量的值小于终止值时,循环结束。循环结构 可以嵌套使用。 • 书写格式不必太过于拘泥,在Editor编辑器中会自动进行 处理。 (例exp2_11.m)
每个单元可以包含任意大小或类型的数据
输出变量打包到一个单元数组中
(3) 解包varargin中的内容:
八、函数变量
(3) 解包varargin中的内容: y(n) = varargin(n){2}
索引{n}获取varargin的第n个单元。 表达式(2)表示单元内容的第二个元素 (4) 打包varargout中的内容: varargout{k}=arrayin(k,:) 允许任意多个输出变量,使用nargout确定输出变量的个数。 (5) 变量列表中的varargin和varargout varargout或varargin必须出现在变量列表的最后 function [out1, out2] = example1(a,b,varargin) function [i, j, varargout] = example1(x1, y1, x2, y2, flag)
五、字符串及其宏命令
• 字符串要用单引号并用括号括在里面。如:
》disp(‘text string’) %disp字符串显示命令
text string • 在单引号里边的字符串可以作为矢量或矩阵的元素。使用 disp命令或输入变量名就可以显示它们表示的字符串。如: 》a=['this is a';'text string'] ??? All rows in the bracketed expression must have the same number of columns.(元素1含9个字符,包括空 格;元素2含有11个字符;因此只要在元素1中加入2个空格 即可解决问题) 》aa=['this is a ';'text string'] 》disp(aa) aa = aa= this is a this is a text string text string
三、MATLAB的程序类型
MATLAB的程序类型有三种,一种是在命令窗口下执行的 脚本M文件;另外一种是可以存取的M文件,也即程序文 件;最后一种是函数(function)文件。 1、脚本M文件 在命令窗口中输入并执行,它所用的变量都要在工作空间中 获取,不需要输入输出参数的调用,退出MATLAB后就释放了。 2、程序文件 • 以.m格式进行存取,包含一连串的MATLAB指令和必要的 注解。需要在工作空间中创建并获取变量,也就是说处理 的数据为命令窗口中的数据,没有输入参数,也不会返回 参数。 • 程序运行时只需在工作空间中键入其名称即可。
二、函数的函数
函数的函数:在其他函数的基础上进行操作 主要在方程求解、最优化、积分和一般差分方程求解 function y = humps(x); y = 1./((x-.3).^2+.01)+1./((x-.9)+.04)-6; P = fminsearch(@humps, .5); humps(p))
2、while循环语句 基本格式 while 表达式 循环体 end • 若表达式为真,则执行循环体的内容,执行后再判断表达 式是否为真,若不为真,则跳出循环体,向下继续执行。 例exp2_12.m While循环和for循环的区别在于,while循环结构的循环 体被执行的次数不是确定的,而for结构中循环体的执行次 数是确定的。
5、continue命令 与for或while语句一起使用; 结束本次循环,跳过循环体中下面尚未执行的 语句,接着进行下一次是否执行循环的判断 6、break命令 与for或while语句一起使用; 终止本次循环,跳出最内层的循环。不用等到 循环的自然结束,根据条件退出循环。 7、return命令 是当前正在运行的函数正常退出; 返回调用它的函数,继续运行。
• 宏是MATLAB语言用在常用命令部分的缩写。它可以被存储 用于建立M文件的一部分。宏命令采用字符串,并使用eval 命令去执行宏命令。下例是采用宏命令计算阶乘的例子。 》fct=‘prod(1:n)’; %求10的阶乘 》n=10;eval(fct) ans=3628800 六、常用的编程命令(例exp2_8.m) • pause:停止m文件的执行直至有键按下。pause(n)将使程序 暂停n秒。 • echo on/off:控制是否在屏幕上显示程序内容。 • keyboard:停止程序执行,把控制权交给键盘。输入return 并回车后继续程序执行。 • x=input(‘prompt’):把输入的字符串作为提示符,等待使用 者输入一个响应,然后把它赋值到b1.m
myhilb.m
• 与在命令窗口中输入命令一样,函数接受输入参数,然后执行并输出 结果。用help命令可以显示它的注释说明。 • 具有标准的基本结构。 (1)函数定义行(关键字function) • function[out1,out2,..]=filename(in1,in2,..) • 输入和输出(返回)的参数个数分别由nargin和nargout两个MATLAB保 留的变量来给出。 (2)第一行帮助行,即H1行 • 以(%)开头,作为lookfor指令搜索的行 (3)函数体说明及有关注解 • 以(%)开头,用以说明函数的作用及有关内容 • 如果不希望显示某段信息,可在它的前面加空行 (4)函数体语句 • 函数体内使用的除返回和输入变量这些在function语句中直接引用的变 量以外的所有变量都是局部变量,即在该函数返回之后,这些变量会自 动在MATLAB的工作空间中清除掉。如果希望这些中间变量成为在整 个程序中都起作用的变量,则可以将它们设置为全局变量。
八、函数变量
(1) 检查输入变量的个数 利用nargin和nargout函数可以获得函数的输入/出变量个数 根据变量个数用条件语句完成不同的任务 (2) 传递变量 利用varargin和varargout函数可以传递任意个数的输入变量 或者返回任意个数的输出给函数 指定的输入变量指定到一个单元数组中;
二、M文件的编辑及MATLAB工作路径的设置
• 进入MATLAB的Editor/Debugger窗口来编辑程序 • 在编辑环境中,文字的不同颜色显示表明文字的不同属性。 绿色:注解;黑色:程序主体;红色:属性值的设定;蓝 色:控制流程。 • 在运行程序之前,必须设置好MATLAB的工作路径,使得 所要运行的程序及运行程序所需要的其他文件处在当前目 录之下,只有这样,才可以使程序得以正常运行。否则可 能导致无法读取某些系统文件或数据,从而程序无法执行。 • 通过cd指令在命令窗口中可以更改、显示当前工作路径。 • 通过路径浏览器(path browser)也可以进行设置