第五章 程序设计基础
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
七、程序流程控制
1、for循环语句 基本格式 for 循环变量=起始值:步长:终止值 循环体 end • 步长缺省值为1,可以在正实数或负实数范围内任意指定。 对于正数,循环变量的值大于终止值时,循环结束;对于 负数,循环变量的值小于终止值时,循环结束。循环结构 可以嵌套使用。 • 书写格式不必太过于拘泥,在Editor编辑器中会自动进行 处理。 (例exp2_11.m)
CH5 MATLAB程序设计入门
一、MATLBA程序的基本设计原则
1、%后面的内容是程序的注解,要善于运用注解使程序更具可读性。 2、养成在主程序开头用clear指令清除变量的习惯,以消除工作空间中其 他变量对程序运行的影响。但注意在子程序中不要用clear。 3、参数值要集中放在程序的开始部分,以便维护。要充分利用 MATLAB工具箱提供的指令来执行所要进行的运算,在语句行之后输 入分号使其及中间结果不在屏幕上显示,以提高执行速度。 4、input指令可以用来输入一些临时的数据;而对于大量参数,则通过建 立一个存储参数的子程序,在主程序中用子程序的名称来调用。 5、程序尽量模块化,也就是采用主程序调用子程序的方法,将所有子程 序合并在一起来执行全部的操作。 6、充分利用Debugger来进行程序的调试(设置断点、单步执行、连续执 行),并利用其他工具箱或图形用户界面(GUI)的设计技巧,将设 计结果集成到一起。 7、设置好MATLAB的工作路径,以便程序运行。
三、MATLAB的程序类型
MATLAB的程序类型有三种,一种是在命令窗口下执行的 脚本M文件;另外一种是可以存取的M文件,也即程序文 件;最后一种是函数(function)文件。 1、脚本M文件 在命令窗口中输入并执行,它所用的变量都要在工作空间中 获取,不需要输入输出参数的调用,退出MATLAB后就释放了。 2、程序文件 • 以.m格式进行存取,包含一连串的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)
5、continue命令 与for或while语句一起使用; 结束本次循环,跳过循环体中下面尚未执行的 语句,接着进行下一次是否执行循环的判断 6、break命令 与for或while语句一起使用; 终止本次循环,跳出最内层的循环。不用等到 循环的自然结束,根据条件退出循环。 7、return命令 是当前正在运行的函数正常退出; 返回调用它的函数,继续运行。
四、MATLAB的编程技巧 三、向量化:加快程序运行
二、M文件的编辑及MATLAB工作路径的设置
• 进入MATLAB的Editor/Debugger窗口来编辑程序 • 在编辑环境中,文字的不同颜色显示表明文字的不同属性。 绿色:注解;黑色:程序主体;红色:属性值的设定;蓝 色:控制流程。 • 在运行程序之前,必须设置好MATLAB的工作路径,使得 所要运行的程序及运行程序所需要的其他文件处在当前目 录之下,只有这样,才可以使程序得以正常运行。否则可 能导致无法读取某些系统文件或数据,从而程序无法执行。 • 通过cd指令在命令窗口中可以更改、显示当前工作路径。 • 通过路径浏览器(path browser)也可以进行设置
每个单元可以包含任意大小或类型的数据
输出变量打包到一个单元数组中
(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)
3、函数文件
例myhilb1.m
myhilb.m
• 与在命令窗口中输入命令一样,函数接受输入参数,然后执行并输出 结果。用help命令可以显示它的注释说明。 • 具有标准的基本结构。 (1)函数定义行(关键字function) • function[out1,out2,..]=filename(in1,in2,..) • 输入和输出(返回)的参数个数分别由nargin和nargout两个MATLAB保 留的变量来给出。 (2)第一行帮助行,即H1行 • 以(%)开头,作为lookfor指令搜索的行 (3)函数体说明及有关注解 • 以(%)开头,用以说明函数的作用及有关内容 • 如果不希望显示某段信息,可在它的前面加空行 (4)函数体语句 • 函数体内使用的除返回和输入变量这些在function语句中直接引用的变 量以外的所有变量都是局部变量,即在该函数返回之后,这些变量会自 动在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结构中循环体的执行次 数是确定的。
五、字符串及其宏命令
• 字符串要用单引ቤተ መጻሕፍቲ ባይዱ并用括号括在里面。如:
》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
8、MATLAB程序的基本组成结构 %说明 清除命令:清除workspace中的变量和图形(clear,close) 定义变量:包括全局变量的声明及参数值的设定 逐行执行命令:指MATLAB提供的运算指令或工具箱 … … … 提供的专用命令 控制循环 :包含for,if then,switch,while等语句 逐行执行命令 … … … end 绘图命令:将运算结果绘制出来 • 当然更复杂程序还需要调用子程序,或与simulink以及其他 应用程序结合起来。
4、switch语句 格式:switch 表达式(%可以是标量或字符串) case 值1 执行方式:表达式的值和 语句1 哪种情况(case)的值相同,就执 case 值2 行哪种情况中的语句,如果不同, 语句2 则执行otherwise中的语句。格 …. 式中也可以不包括otherwise, otherwise 这时如果表达式的值与列出的各 语句3 种情况都不相同,则继续向下执 end 行。 例exp2_14.m
• 宏是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’):把输入的字符串作为提示符,等待使用 者输入一个响应,然后把它赋值到x。
八、函数变量
(1) 检查输入变量的个数 利用nargin和nargout函数可以获得函数的输入/出变量个数 根据变量个数用条件语句完成不同的任务 (2) 传递变量 利用varargin和varargout函数可以传递任意个数的输入变量 或者返回任意个数的输出给函数 指定的输入变量指定到一个单元数组中;
八、函数变量
(6) 返回输出变量: 函数定义行左侧的任何变量都是调用函数的返回值 传递任何函数可以修改的输入变量,需要把相同的变量 作为输出变量:[text, offset] = readText(filestart, offset)
九、子函数和私有函数
(1) 子函数 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、子程序与主程序之间的数据是通过参数进行传递的,子程 序应用主程序传递来的参数进行计算后,将结果返回主程序。 例exp2_9.m 2、如果一个函数内的变量没有特别声明,那么这个变量只 在函数内部使用,即为局部变量。如果两个或多个函数共用 一个变量(或者说在子程序中也要用到主程序中的变量,注 意不是参数),那么可以用global来将它声明为全局变量。 例exp2_10.m 全局变量的使用可以减少参数传递,合理利用全局变量可 以提高程序执行的效率。