《第4章 MATLAB编程基础》由会员分享,可在线阅读,更多相关《第4章 MATLAB编程基础(76页珍藏版)》请在金锄头文库上搜索。
1、第4章MATLAB编程基础 M流程控制语句程序优化与调试基本绘图图像函数绘图 一 M文件 MATLAB输入命令有两种方法 一是在MATLAB主窗口逐行输入命令 每个命令之间用分号或逗号分隔 每行可包含多个命令 二是将命令组织成一个命令语句文集 使用扩展名 m 称为M文件 它由一系列的命令和语句组成 当程序需要使用大量语句时 使用M文件非常方便 其编写和执行的效率远远高于从主窗口逐条输入语句的效率 启动M文件 从命令窗口选择 新建 或 打开 或在命令窗口输入 edit 脚本文件和函数文件 脚本文件是一连串的MATLAB命令 它解决了运行指令较多时过于麻烦的问题 运行时只需在MATLAB命令窗口输
2、入文件名或单击M文件编辑窗口的绿色三角图标 函数文件的第一句可执行语句是以function引导的定义语句 函数文件可以接受输入变量 返回结果 且可以返回任意多个值 事实上 MATLAB提供的函数命令大部分都是由函数文件定义的 函数文件基本格式 function 返回参数列表 函数名 输入变量 函数定义行 H1行及帮助文档 解释此函数的功能输入 返回变量格式的检测函数主体及注释函数体语句 例4 2编写一个函数文件 实现对输入数值求平方的功能 functiony fun1 x y x 2 脚本文件和函数文件的比较 局部变量和全局变量 M文件中的语句对整个MATLAB工作空间里的变量起作用 这样的变
3、量称为全局变量 局部变量是在函数体内部使用的变量 其影响范围只能在本函数体内 只在函数执行期间存在 脚本文件过程中产生的变量均为全局变量 保存在内存工作空间 函数文件中产生的变量如果不是特别声明均为局部变量 函数调用 函数调用有两种语法方式 函数名参数1参数2 参数N 返回参数1 返回参数2 返回参数N 函数名 参数1 参数2 参数M 例4 4 举例说明两种参数传递方式 A pi dispAA 显示结果为A 参数A以字符串形式传递 disp A 3 1416 显示结果为pi的值 参数以值进行传递 二 文件操作 1 打开文件fid fopen 文件名 打开方式 2 关闭文件关闭文件用fclose
4、函数 调用格式为 sta fclose fid 3 在MATLAB中 读取二进制文件的命令是fread 其调用格式为 A fread fid count precision 使用fread读取该文件后 得到的为代码对应的数值数组 使用char 命令可以将数值数组转换成程序代码 三 MATLAB的流程控制语句 通常MATLAB程序按照前后顺序执行 但在实际中 常会运到很多情况需要重复执行一段语句 多次写同一组命令非常麻烦 为此MATLAB提供了多种流控制语句 循环控制语句条件控制语句其它流程控制语句 1 循环控制语句 1 for循环语句for语句执行固定次数的循环 将循环条件的初值 判别和变化放
5、在循环的开头 for循环语句的一般形式是 for 计数器 初值 增量 终止值 执行语句 执行语句end 2 while循环语句while循环函数用于当循环过程不满足某个指定条件时终止的情况就 此时事先并不能确定循环的执行次数 while循环的格式为while 逻辑表达式 执行语句end 例 利用for循环求1 2 3 5 的值 sum 0 fori 1 5pdr 1 fork 1 ipdr pdr k endsum sum pdr end 例 找出近似级数中误差大于1 之前的最大的x值 精确到小数点后两位位置 其MATLAB程序为 x 0 while exp x 1 x x 2 2 x 3 6
6、 0 01 x x 0 01 enddisp x 0 01 2 条件控制语句 1 if else elseif语句if语句用来检查逻辑运算 逻辑函数 逻辑变量值等逻辑表达式的真假 若为真则执行if和else之间的执行语句 否则 转去执行另一分支 其格式为 if逻辑表达式执行语句1else执行语句2end 例 分区间显示函数值 functiony f x ifx 0y 0 elseifx 1f x elseifx 2f 2 x elsef 0 end 2 switch语句switch函数的语法结构为 switch输入表达式 标量或字符串 case条件语句1执行语句1case条件语句2执行语句2o
7、therwise执行语句nend 例 根据用户要求找出数组x中的最大值 最小值或所有元素的和 t 0 100 x exp t sin t 给定数组xrequire input Typemin max orsum s 用户输入要求require lower require switchrequirecase min 分支判断通过比较字符串完成minimum min x case max maximum max x case sum total sum x otherwisedisp Youhavenotenteredaproperrequirement end 3 其它流控制语句 1 input
8、提示用户从键盘输入数值 字符串或表达式 常用的格式为 1 a input Pleaseinputanumber 2 a input Pleaseinputanumber s 2 keyboard命令使MATLAB暂停程序的运行并调用机器的键盘命令进行处理 处理完后 键入return 按回车键 程序将继续运行 3 其它流控制语句 3 pause命令使程序运行暂停 等待用户按任意键继续 pause n 表示停止n秒后继续执行 4 break命令终止循环的执行 使程序不必等待循环的自然结束 而根据循环内部另设的条件是否满足来决定是否退出循环 5 还有一中情况是若发生错误时 跳过错误继续执行其余的循环
9、体 此时可使用continue命令 四 MATLAB程序优化与调试 提高程序效率 优化程序的方法 1 矢量化操作 将循环程序等价为矢量或矩阵操作 MATLAB是矩阵语言 内部数据运算是基于矢量和矩阵的 矢量化操作可以加速程序的执行 2 预分配矩阵空间 相比在循环语句中逐步增加矩阵的维数 预先定义矢量的方法能够提高程序的执行效率和内存使用率 3 使用C MEX文件 在必须使用for或while循环体时 为了提高执行效率 可以将循环部分的代码转化为C MEX文件 4 尽量使用函数文件 在MATLAB中 函数文件的效率一般比脚本文件的效率要高 这是由于函数文件有自己的工作空间 执行一次后仅保存程序运
10、行必需的变量 并将函数编译成伪代码 下次调用时提高了效率 运行过程的错误类型一般包括两种 语法错误和运行错误 1 语法错误 由于格式错误或算法错误导致程序不能正常运行 2 运行错误 运行结果与预期效果不一致 其原因是多方面的 包括对算法理解不正确 误用指令或程序流控制不合理等 对于这种错误MATLAB不会给出错误信息 很难发现 需要跟踪调试才能找出问题 调试程序的方法 1 将函数中被选定行的分号去掉 运算的中间结果就可以在控制窗口中显示 便于发现错误 2 在选定的位置键入keyboard命令 以便将临时控制权交给键盘 这样就可以查询函数工作区 并可以根据需要改变变量的值 若要回到程序 输入re
11、turn命令即可 3 对于函数文件 在function语句前插入 把函数文件变为脚本文件 工作空间就是基本工作空间 便于出现错误时可以查询 4 在适当的位置利用命令显示变量值 利用disp命令或直接以变量名 不加分号 作为一行 5 利用echoon和echooff显示执行的指令行 判断程序流是否正确 6 还可以使用MATLAB编译器的debug菜单进行调试 五 基本绘图 MATLAB提供强大的命令完成用图表来显示向量和矩阵 通过图形的线型 立面 色彩 光线 视角等属性的控制 可把数据的内在特征表现得淋漓尽致 三维曲面图 Matlab绘图的一般步骤包括 1 输入相应的数据信息 包括各种向量 矩阵
12、等 2 调用适当的绘图函数进行绘图 并对图形属性进行设置 包括坐标轴标注 线条的颜色 线型等以得到较理想的图形 3 添加图形注释 在完成图表的基础外观并设置坐标轴属性后 还可以添加一些注释信息 如图表的标题 坐标轴的名称 图例和文字说明等 1 二维绘图 在二维曲线绘图命令中 plot是最基本和最重要的指令其它许多特殊绘图指令都是以它为基础而形成的 1 plot X Y 基本格式 以y x 的函数关系作出直角坐标图 如果y为n m的矩阵 则以x为自变量 作出m条曲线 2 plot Y 缺省自变量绘图格式 x为向量 以x元素值为纵坐标 以相应元素下标为横坐标绘图 3 plot x1 y1 x2 y
13、2 绘制多条曲线 4 plot X1 Y1 LineSpec1 X2 Y2 LineSpec2 将按顺序分别画出由参数LineSpeci定义的 Xi Yi 线条 可以混合使用三参数和二参数的形式 即 plot X1 Y1 LineSpec1 X2 Y2 X3 Y3 LineSpec3 参数LineSpec涉及线条的类型 色彩 标记符号 将在后文介绍 例 在 0 2 区间内绘制曲线y 2exp x cos 2x 及其包络 并要求包络用红色虚线绘制 x 1 pi 50 2 pi 规定向量x的取值范围及间距y 2 exp x cos 2 pi x y1 2 exp x y1为上包络 y1为下包络pl
14、ot x y x y1 r x y1 r 表二维函数绘图 例 分别作函数y 10exp x 的双对数坐标和y轴对数坐标 x linspace 0 100 subplot 2 1 1 划分子图loglog x 10 exp x xlabel x ylabel y title 双对数图 subplot 2 1 2 semilogy x 10 exp x s xlabel x ylabel y title y轴对数坐标 例4 15假定误差限为10 产生一系列数字 并生成该数据的误差条形图 x linspace 0 2 pi 60 在指定的范围内均匀取值 取60个点y 10 cos x 产生数据e 0
15、 1 y 定义误差限errorbar x y e xlabel x ylabel y title 误差条形图 参数LineSpec涉及线条的类型 色彩 标记符号 字母颜色标点线型y黄色 点线m粉红 圈线c亮蓝 线r大红 字线g绿色 实线b蓝色 星形线w白色 虚线k黑色 点划线 例4 18设定曲线颜色 线型和标记等 t 0 pi 20 2 pi plot t t cos t r 由字符串 r 传递曲线线型和颜色及线上标记holdonplot t sin t pi bs plot t sin 2 t mo LineWidth 2 MarkerEdgeColor k MarkerSize 12 Li
16、neWidth 改变线条宽度 MarkerEdgeColor 设置标记颜色 MarkerSize 设置标记大 小 2 绘图标识 绘制图形时MATLAB根据数据范围自动选择合适的坐标长度 用户还可以根据需要使用axis命令制定坐标刻度 axis xminxmaxyminymaxzminzmax 给出x y z的最小值和最大值来设置当前坐标轴的x轴 y轴和z轴的范围 系统按照给出的3个坐标轴的范围绘制合适的三维图 如果只给出4个参数 则是给定x轴和y轴的范围 grid 给二维或三维图形的坐标面增加分格线 其用法包括 gridon 给当前的坐标轴增加分格线 gridoff 从当前的坐标轴中去掉分格线 grid 改变分格线的显示与否的状态 title 给当前图形加上标题 格式为title string 在图形窗口顶端的中间位置放置字符串string作为标题xlabel ylabel zlabel 分别给x y z轴添加坐标轴标注 其用法与title一致 legend 在多种图形对象 线条图 条形图 饼形图等 的窗口中添加一个图例 对于每一线条 图例会在用户给定的文字标签旁边显示线条的线型 标记