国家级精品课程 控制系统仿真与CAD 第二章 MATLAB 语言程序设计基础 东北大学信息学院 薛定宇
第二章 MATLAB 语言程序设计基础 MATLAB 语言程序设计基础 MATLAB语言绘图 MATLAB语言的图形用户界面设计 数据结构与语句结构 基本运算语句 程序流程 函数的编写与技巧 MATLAB语言绘图 二维与三维绘图 MATLAB语言的图形用户界面设计 控制系统仿真与CAD 国家级精品课程 2019/1/2
2.1 MATLAB语言程序设计基础 MATLAB 语言的特色 本节主要内容 简洁高效性 强大的科学运算功能 方便易用的绘图功能 庞大的工具箱 强大的动态系统仿真功能——Simulink 本节主要内容 常量与变量、数据结构 基本语句结构、冒号表达式 控制系统仿真与CAD 国家级精品课程 2019/1/2
2.1.1 常量与变量 常量(保留字符串) 变量: eps: 机器的浮点运算误差限,默认值 i和j:虚数单位,-1的平方根,i=sqrt(-1) Inf: 无穷大量,-Inf为负无穷大 NaN:不定式(Not a Number) pi:圆周率p的双精度浮点表示 变量: 由字母引导,可以跟字母、数字和下划线等 区分大小写 控制系统仿真与CAD 国家级精品课程 2019/1/2
2.1.2 数据结构 MATLAB下最常用数值量为双精度浮点数 符号型数据结构 占8个字节(64位),遵从IEEE记数法 有11个指数位、53位尾数及一个符号位 值域的近似范围为 其MATLAB表示为double() 符号型数据结构 syms 命令申明符号变量 控制系统仿真与CAD 国家级精品课程 2019/1/2
例2-1 显示e的前300位 其他数据结构 vpa(A) 显示符号变量 int8() 、int16() 、int32() 、uint16() 和 uint32() 字符串型数据:MATLAB字符串是用单引号括起来的 多维数组:三维数组是一般矩阵的直接拓展。 单元数组:多变量系统的频域响应数据存储 类与对象:传递函数对象、状态方程对象 控制系统仿真与CAD 国家级精品课程 2019/1/2
2.1.3 MATLAB的基本语句结构 两种赋值语句: 直接赋值语句:赋值变量=赋值表达式 函数调用语句 后面加分号不显示结果 无返回变量,结果传给 ans 函数调用语句 [返回变量列表]=funname(输入变量列表) 一般对应于*.m函数 同一函数可以有不同的调用格式 控制系统仿真与CAD 国家级精品课程 2019/1/2
例2-2 无需预先定义维数 例2-3 控制系统仿真与CAD 国家级精品课程 2019/1/2
2.1.4 冒号表达式与子矩阵提取 基本语句 例2-4 子矩阵提取 例2-5 控制系统仿真与CAD 国家级精品课程 2019/1/2
2.2 基本数学运算 基本代数运算 矩阵转置:A’、A.’ 加减乘除:A+B、A-B、A*B、A\B、B/A 矩阵翻转:flipud(A)、fliplr(A)、rot90(A) 矩阵乘方:A^x 点运算:A.*B、A.^2、A.^A Kronecker乘积:kron(A,B) 控制系统仿真与CAD 国家级精品课程 2019/1/2
矩阵的逻辑运算 矩阵的比较运算 点运算举例 逻辑运算: &、|、~、xor() 运算符:>、<、==、>=、<=、~= 函数:find()、any()、all() 控制系统仿真与CAD 国家级精品课程 2019/1/2
2.2.4 解析结果的化简与变换 化简函数 例2-5 变量替换 其他函数:collect()、numden()、expand()、factor() 例2-5 变量替换 控制系统仿真与CAD 国家级精品课程 2019/1/2
例2-6 双线性变换 基本数论运算 例2-8 取整 取整:floor()、ceil()、round()、fix() 其他:rat()、rem()、gcd()、lcm()、factor()、isprime() 例2-8 取整 控制系统仿真与CAD 国家级精品课程 2019/1/2
例2-9 有理化 Hilbert矩阵 例2-10 最大公约数、最小公倍数、因式分解 控制系统仿真与CAD 国家级精品课程 2019/1/2
2.3 MATLAB编程:流程控制语句 循环结构 例2-11 求 控制系统仿真与CAD 国家级精品课程 2019/1/2
例2-12 求 循环与向量化运算 例2-13 求最小m 不适用for 控制系统仿真与CAD 国家级精品课程 2019/1/2
2.3.2 条件转移语句 一般结构 例2-14 控制系统仿真与CAD 国家级精品课程 2019/1/2
其他流程控制结构 开关结构 试探结构 控制系统仿真与CAD 国家级精品课程 2019/1/2
2.4 函数编写 M-脚本M-脚本与M-函数 例2-15 M-函数是MATLAB主流编程结构 M-函数:信息处理单元 M-脚本编程的麻烦 控制系统仿真与CAD 国家级精品课程 2019/1/2
2.4.1 函数的基本结构 函数结构 特别函数 变元个数:nargin、nargout 变元内容:varargin、varargout 控制系统仿真与CAD 国家级精品课程 2019/1/2
例2-16 脚本变函数 例2-17 编程实例:Hilbert矩阵 选择变元 函数改写:*.m文件 生成 矩阵 如果只给一个输入变元,生成方阵 生成 矩阵 如果只给一个输入变元,生成方阵 控制系统仿真与CAD 国家级精品课程 2019/1/2
编程:核心部分 如何处理一个变元 完整程序 控制系统仿真与CAD 国家级精品课程 2019/1/2
递归调用编程结构 例2-18 阶乘 例2-19 不适合递归调用的问题:Fibonacci数列 计算量巨大 控制系统仿真与CAD 国家级精品课程 2019/1/2
可变输入、输出个数 利用 varargin、varargout 例2-20 现有函数(多项式乘法):conv(p1,p2) 期望编任意多个多项式相乘:convs(p1,p2,…) 程序实现 控制系统仿真与CAD 国家级精品课程 2019/1/2
2.4.4 匿名函数与inline函数 不用编写*.m,定义函数的方法 匿名函数: 举例 可以动态地定义函数,在科学运算中有用 二者功能重复,后者远差于前者,不再使用 匿名函数: 举例 控制系统仿真与CAD 国家级精品课程 2019/1/2
2.5 二维图形绘制 可以绘制出各种二维曲线 可以由数据绘图,也可以由格式绘图 本节主要内容 基本二维图形绘制语句 带有其他选项的绘图函数 二维曲线的标注方法 在MATLAB图形上添加文字标注 特殊图形绘制函数及举例 隐函数的曲线绘制 控制系统仿真与CAD 国家级精品课程 2019/1/2
2.6.1 基本二维图形绘制语句 已知数据点(实验点或计算点) 可以容易地绘制出二维“曲线” 曲线是折线,不是真正的曲线 如果数据点足够密,则绘制的折线看起来像曲线,另外还可以对曲线进行光滑处理 控制系统仿真与CAD 国家级精品课程 2019/1/2
plot() 函数的扩展 t 是向量,y 是矩阵,能同时绘制多条曲线 t, y 是同样维数的矩阵,能绘制多条曲线 多组 t, y 值 控制系统仿真与CAD 国家级精品课程 2019/1/2
绘图语句选项 双纵坐标曲线绘制 控制系统仿真与CAD 国家级精品课程 2019/1/2
例2-21 需要检验:减小步长试试 例2-22 饱和非线性 控制系统仿真与CAD 国家级精品课程 2019/1/2
2.5.2 二维曲线的标注方法 二维曲线修饰方法 坐标轴设置 其他设置 text、gtext、xlim、ylim函数 控制系统仿真与CAD 国家级精品课程 2019/1/2
2.5.3 在MATLAB图形上添加文字标注 可以在图形窗口上添加直线、箭头和字符 事后修改图形属性 支持LaTeX格式的命令 颜色、字体大小、线宽 支持LaTeX格式的命令 下标:x_a、x_{abc} 上标:x^a、x^{abc} 字体设置:\bf、\it 高质量图形叠印:overpic.sty宏包 控制系统仿真与CAD 国家级精品课程 2019/1/2
2.5.4 特殊图形绘制函数及举例 控制系统仿真与CAD 国家级精品课程 2019/1/2
例2-23 极坐标图 变换直角坐标可行 调用专门函数 试凑周期 图形属性修改 控制系统仿真与CAD 国家级精品课程 2019/1/2
子窗口分割 子窗口分割 不同子窗口下绘制不同的曲线 例2-24 控制系统仿真与CAD 国家级精品课程 2019/1/2
2.5.5 隐函数的曲线绘制 隐函数绘制函数ezplot() 例2-25 参数方程 用底层语言难以绘制 控制系统仿真与CAD 国家级精品课程 2019/1/2
2.6 三维图形的绘制方法 2.6.1 三维曲线的绘制方法 三维曲线 例2-26 MATLAB绘制命令 ezplot 绘制命令 控制系统仿真与CAD 国家级精品课程 2019/1/2
三维火柴杆曲线 叠印图形 三维填充图形 控制系统仿真与CAD 国家级精品课程 2019/1/2
2.6.2 三维曲面的绘制方法 三维网格徒手画表面图绘制函数 例2-27 控制系统仿真与CAD 国家级精品课程 2019/1/2
其他图形 例2-28 分段函数 控制系统仿真与CAD 国家级精品课程 2019/1/2
网格和曲面图其他绘制函数 shading命令修饰 视角设置 三视图 控制系统仿真与CAD 国家级精品课程 2019/1/2
2.6.3 局部图形的剪切处理 如果曲线、曲面数据中含有NaN,则绘图时会自动被忽略掉 例:二元函数 剪切掉 MATLAB绘制命令 控制系统仿真与CAD 国家级精品课程 2019/1/2
2.7 MATLAB图形用户界面设计技术 图形界面的优劣往往决定着软件的档次 MATLAB的图形用户界面(Graphical User Interface, GUI)设计技术对设计出良好的通用软件十分重要 本节主要内容 图形界面设计工具Guide 句柄图形学及句柄对象属性 菜单系统设计 界面设计举例与技巧 工具栏设计 控制系统仿真与CAD 国家级精品课程 2019/1/2
2.7.1 图形界面设计工具Guide 在命令窗口给出guide命令可以启动图形用户界面设计程序,得出如下选项 建立一个默认的空白界面(Blank GUI) 带有一些控件的界面(GUI with Uicontrols) 带有坐标轴和菜单的界面(GUI with Axes and Menu) 基本模态对话框(Modal Question Dialog 打开现有的GUI (Open Existing GUI) 控制系统仿真与CAD 国家级精品课程 2019/1/2
2.7.2 句柄图形学及句柄对象属性 图形用户界面编程主要是对各个对象属性读取和修改的技术 窗口是一个对象,其上面的每个控件也都是对象,每个对象都有自己的属性 双击对象则可以打开对象属性浏览器 还可以使用set和get函数设置、读取属性 例如,用户可以通过这样的属性浏览器改变原型窗口的属性,如颜色等 控制系统仿真与CAD 国家级精品课程 2019/1/2
窗口对象的常用属性 MenuBar属性:设置图形窗口菜单形式 Name属性:设置图形窗口标题栏中内容 Units属性:窗口尺寸的单位,默认的像素点单位pixels,此外,normalized、inches Position属性:窗口位置属性,包含左下角坐标和宽度、高度这4个参数构成的向量 Toolbar属性:图形窗口可视编辑工具条 Visible属性:建立的窗口是否可见 控制系统仿真与CAD 国家级精品课程 2019/1/2
对象属性的读取与修改 前面提及的关键函数set和get 常用的句柄 gcf:得到当前窗口的句柄 gco:获得当前对象的句柄 gca:获得当前坐标系的句柄 gcs:获得当前Simulink模型的句柄 控制系统仿真与CAD 国家级精品课程 2019/1/2
简单界面设计实例 设计一个窗口,有两个控件:按钮和文本。按钮按下后在文本位置显示“Hello world!” 绘制原型窗口:打开空白原型窗口并在该窗口中绘制出这两个控件 控件属性修改:因为需要修改文本控件的属性 String属性:先设置成空白字符串 Tag属性:很关键,设置成txtHello 自动生成框架文件:建立了窗口之后,可以将其存成.fig文件,如c2eggui1.fig,这时会自动生成c2eggui1.m文件 控制系统仿真与CAD 国家级精品课程 2019/1/2
其他可能的回调函数 编写回调函数:为按钮对象编写回调函数,当按钮按下后,操作Tag为txtHello的控件 CloseRequestFcn:关闭窗口时响应函数。 KeyPressFcn:键盘键按下时响应函数。 WindowButtonDownFcn: 鼠标键按下时响应函数。 WindowButtonMotionFcn: 鼠标移动时响应函数。 WindowButtonUpFcn: 鼠标键释放时响应函数。 CreateFcn和DeleteFcn:建立和删除对象时响应函数。 CallBack:对象被选中时自动执行的回调函数 控制系统仿真与CAD 国家级精品课程 2019/1/2
其他控件的常用属性 Units与Position属性:与窗口定义是一致的 String属性:标注该控件的字符串 CallBack属性:该对象被选中和改变时,系统自动响应的函数。 Enable属性:表示此控件的使能状态 CData属性:将真色彩图形标注到控件上 TooltipString属性:提示信息显示, UserData属性:界面及控件之间数据交换与暂存 Interruptable属性:回调函数在执行时是否允许中断有关字体的属性:如FontAngle、 FontName 控制系统仿真与CAD 国家级精品课程 2019/1/2
2.7.4 菜单系统设计 菜单编辑器Tools | Menu Editor 演示程序:c2eggui2.m 允许用户给窗口设计自己的菜单系统 添加菜单项 设计子菜单项 编写回调函数 控制系统仿真与CAD 国家级精品课程 2019/1/2
2.7.5 界面设计举例与技巧 设计目标:设计一个窗口 建立主坐标系,以后绘制三维图形 建立函数编辑框,接受用户输入的绘图数据 建立两个按钮,一个用于启动绘图功能,另一个用于启动演示功能。 建立一组3个编辑框,设置光源的坐标值 建立一组3个复选框,决定各轴是否需要网格 建立一个列表框,描述着色方法。 控制系统仿真与CAD 国家级精品课程 2019/1/2
原型窗口界面的预期效果 控制系统仿真与CAD 国家级精品课程 2019/1/2
程序界面的任务分配 文件名:c2eggui3.m 控制系统仿真与CAD 国家级精品课程 2019/1/2
2.8.6 工具栏设计 Tools | Toolbar Editor 编写一个新图形界面 提供了一些标准的工具图标,有继承功能 用户可以自己添加新工具图标 如何给图标写回调函数 编写一个新图形界面 添加坐标系,绘制正弦曲线 使之包含x、y轴局部放大的工具图标 文件名:c2eggui4.m 控制系统仿真与CAD 国家级精品课程 2019/1/2
第二章小结 介绍了 MATLAB 语言的基本编程知识 数据结构:double()、syms、vpa() 语句格式:直接赋值、函数调用,冒号表达式 矩阵的代数运算、逻辑运算和比较运算 解析结果处理:simple()、subs()、collect()等函数 取整函数:floor()、cell()、fix()、roud()、rat() 数据处理:gcd()、lcm()、factor()、isprime()等 函数编程:varargin、nargin、递归调用 控制系统仿真与CAD 国家级精品课程 2019/1/2
编程的流程结构 MATLAB绘图函数 循环结构:for、while、break 转移结构:if、elseif、else 开关结构:switch、case 试探结构:try、catch MATLAB绘图函数 二维绘图:plot()、polar()、subplot()、ezplot() 三维绘图:plot3()、surf()、mesh()、meshgrid() 图形修饰:set()、get()、gtext()、title()等 视角设置:view() 控制系统仿真与CAD 国家级精品课程 2019/1/2
图形用户界面设计技术 面向对象的编程方式:对象、属性、方法 打开设计界面:guide 图形用户界面、对话框设计 菜单设计 工具栏设计 对象属性设置: 回调函数编写: 菜单设计 工具栏设计 控制系统仿真与CAD 国家级精品课程 2019/1/2