MATLAB3 - MATLAB绘图与程序设计.ppt_第1页
MATLAB3 - MATLAB绘图与程序设计.ppt_第2页
MATLAB3 - MATLAB绘图与程序设计.ppt_第3页
MATLAB3 - MATLAB绘图与程序设计.ppt_第4页
MATLAB3 - MATLAB绘图与程序设计.ppt_第5页
已阅读5页,还剩79页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MATLAB绘图与程序设计 MATLAB的绘图与计算可视化 MATLAB的程序设计 MATLAB具有非常强大的二维和三维绘图功能 尤其擅长于各种科学运算结果的可视化 MATLAB也是一个功能强大的编程工具软件 可编写出相当高效的脚本 Script m文件及函数 一 MATLAB的绘图与计算可视化 1 MATLAB图形制作概述2 MATLAB图形窗口的功能3 MATLAB二维曲线的绘制4 MATLAB的三维图形绘制 1 MATLAB图形制作概述 MATLAB进行图形绘制的基本步骤为 1 准备作图数据 2 选定作图窗口与作图区域 figure subplot 3 调用作图命令 4 设置图形格式线性机器标记的设置坐标轴范围 坐标轴标记 网格线的设置坐标轴标签 图例 文本等的设置 5 输出所制作的图形 2 MATLAB的图形窗口 MATLAB用于图形输出的专用窗口 称为图形窗口 所有的绘图命令将把图形输出到当前图形窗口 若在命令执行前 当前窗口已经存在图形 则原图形将被新图形覆盖掉 3 二维曲线的绘制 基本绘图命令plotplot命令是MATLAB中最简单而且使用最广泛的一个绘图命令 用来绘制二维曲线 语法 plot x 绘制以x为纵坐标的二维曲线plot x y 绘制以x为横坐标y为纵坐标的二维曲线说明 x和y可以是向量或矩阵 plot命令的功能plot命令自动打开一个图形窗口Figure用直线连接相邻两数据点来绘制图形根据图形坐标大小自动缩扩坐标轴 将数据标尺及单位标注自动加到两个坐标轴上 可自定坐标轴 可把x y轴用对数坐标表示 1 plot x 绘制x向量曲线例1 用plot x 命令画直线x1 123 plot x1 x2 010 plot x2 2 plot x y 绘制向量x和y的曲线plot x y 参数x y为向量 以x为横坐标 以y为纵坐标 注意 x y的长度必须相等例2 绘制正弦曲线y sin x 和方波曲线x1 0 0 1 2 pi y1 sin x1 y1为x1的正弦函数plot x1 y1 x2 011223 y2 110011 plot x2 y2 axis 0402 将坐标轴范围设定为0 4和0 2 3 plot x 绘制矩阵x的曲线当X是一个m n的矩阵 plot x 命令为矩阵X每一列画一条线 共n条曲线 各曲线自动用不同颜色标示 例3矩阵图形的绘制 x1 123 456 plot x1 x2 peaks 产生一个49 49的矩阵plot x2 程序分析 a图中有三条曲线而不是两条曲线 因为矩阵x1有三列 每列向量画一条曲线 b图为由peaks函数生成的一个49 49的二维矩阵 因此产生49条曲线 图a矩阵X1的图形 图b矩阵X1的图形 4 plot x y 绘制混合式曲线当plot x y 命令中的参数x和y是向量或矩阵时 分别有以下几种情况 如果x是向量 而y是矩阵 则x的长度与矩阵y的行数或列数必须相等 如果x的长度与y的行数相等 则向量x与矩阵y的每列向量对应画一条曲线 如果x的长度与y的列数相等 向量x与y的每行向量画一条曲线 如果y是方阵 则x和y的行数和列数都相等 将向量x与矩阵y的每列向量画一条曲线 如果x是矩阵 而y是向量 则y的长度必须等于x的行数或列数 绘制的方法与前一种相似 如果x和y都是矩阵 则大小必须相同 矩阵x的每列和y的每列画一条曲线 例4混合式图形的绘制 x1 123 y1 123 456 plot x1 y1 每行一条曲线 Fig 1y2 12 34 56 plot x1 y2 每列一条曲线 Fig 2plot y1 x1 Fig 3plot y2 x1 Fig 4 Fig 1 Fig 2 Fig 3 Fig 4 5 plot x1 y1 x2 y2 绘制多条曲线plot命令还可以同时绘制多条曲线 用多个矩阵对为参数 MATLAB自动以不同的颜色绘制不同曲线 例5 绘制三条曲线 x 0 0 1 2 pi plot x sin x x cos x x sin 3 x 画三条曲线 绘制曲线的一般步骤 说明 步骤1和3是最基本的绘图步骤 如果利用MATLAB的默认设置通常只需要这两个基本步骤就可以基本绘制出图形 而其他步骤并不完全必需 步骤2一般在图形较多的情况下 需要指定图形窗口 子图时使用 除了步骤1 2 3的其他步骤用户可以根据自己需要改变前后次序 6 复向量式绘图plot Z 当Z为一个复向量时 该命令等价于plot real Z imag Z 其它情况忽略Z的虚部 例6 t 0 0 1 3 pi x t i cos t plot x figure plot t x 多个图形绘制的方法 1 指定图形窗口如果需要多个图形窗口同时打开时 可以使用figure语句 语法 figure n 产生新图形窗口说明 如果该窗口不存在 则产生新图形窗口并设置为当前图形窗口 该窗口名为 FigureNo n 而不关闭其它窗口 如果在使用绘图命令之后 想清除图形窗口画其它图形 应使用 clf 命令清图形窗 2 同一窗口多个子图如果需要在同一个图形窗口中布置几幅独立的子图 可以在plot命令前加上subplot命令来将一个图形窗口划分为多个区域 每个区域一幅子图 语法 subplot m n k 使 m n 幅子图中的第k幅成为当前图说明 将图形窗口划分为m n幅子图 k是当前子图的编号 可以省略 子图的序号编排原则是 左上方为第1幅 先向右后向下依次排列 子图彼此之间独立 例7 用subplot命令画四个子图 x 0 0 1 2 pi subplot 2 2 1 分割为2 2个子图 左上方为当前图plot x sin x subplot 2 2 2 右上方为当前图plot x cos x subplot 2 2 3 左下方为当前图plot x sin 3 x subplot 224 右下方为当前图 省略逗号plot x cos 3 x 同一窗口多个子图绘制 3 同一窗口多次叠绘为了在一个坐标系中增加新的图形对象 可以用 hold 命令来保留原图形对象 语法 holdon 使当前坐标系和图形保留holdoff 使当前坐标系和图形不保留hold 在以上两个命令中切换说明 在设置了 holdon 后 如果画多个图形对象 则在生成新的图形时保留当前坐标系中已存在的图形对象 MATLAB会根据新图形的大小 重新改变坐标系的比例 例8在同一窗口画出函数sinx在区间 02 的曲线和cosx在区间 的曲线 x1 0 0 1 2 pi plot x1 sin x1 holdonx2 pi 1 pi plot x2 cos x2 程序分析 坐标系的范围由0 2 转变为 2 4 双纵坐标图语法 plotyy x1 y1 x2 y2 以左 右不同纵轴绘制两条曲线说明 左纵轴用于 x1 y1 数据 右纵轴用于 x2 y2 数据来绘制两条曲线 坐标轴的范围 刻度都自动产生 例8续用plotyy函数实现在同一图形窗口绘制两条曲线 plotyy x1 sin x1 x2 cos x2 程序分析 plotyy函数用不同颜色绘制两条曲线 左右两边使用两个纵坐标轴 横坐标从 2 用holdon在同一窗口画出两条曲线 用plotyy在同一窗口画出两条曲线 曲线的线型 颜色和数据点形 语法 plot x y s 说明 x为横坐标矩阵 y为纵坐标矩阵 s为类型说明字符串参数 s字符串可以是线段类型 颜色和数据点形三种类型的符号之一 也可以是三种类型符号的组合 例9用不同线段类型 颜色和数据点形画出sinx和cosx曲线 x 0 0 1 2 pi plot x sin x r 用红色点划线画出曲线holdonplot x cos x b o 用蓝色圆圈画出曲线 用点线连接 设置坐标轴和文字标注 1 坐标轴的控制 2 分格线和坐标框 a 使用grid命令显示分格线语法 gridon 显示分格线gridoff 不显示分格线grid 在以上两个命令间切换说明 不显示分格线是MATLAB的默认设置 分格线的疏密取决于坐标刻度 如果要改变分格线的疏密 必须先定义坐标刻度 b 使用box命令显示坐标框语法 boxon 使当前坐标框呈封闭形式boxoff 使当前坐标框呈开启形式box 在以上两个命令间切换说明 在默认情况下 所画的坐标框呈封闭形式 例10在两个子图中使用坐标轴 分格线和坐标框控制 x 0 0 1 2 pi subplot 2 1 1 plot sin x cos x axisequal 纵 横轴采用等长刻度gridon 加分格线subplot 2 1 2 plot x exp x axis 0 3 0 2 改变坐标轴范围 3 文字标注 a 添加图名语法 title s 书写图名说明 s为图名 为字符串 可以是英文或中文 b 添加坐标轴名语法 xlabel s 横坐标轴名ylabel s 纵坐标轴名 c 添加文字注释语法 text xt yt s 在图形的 xt yt 坐标处书写文字注释 d 添加图例语法 legend s pos 在指定位置建立图例legendoff 擦除当前图中的图例说明 参数s是图例中的文字注释 如果多个注释则可以用 s1 s2 的方式 参数pos是图例在图上位置的指定符 它的取值如下表所示 例11在图形窗口中添加文字注释 x 0 0 1 2 pi plot x sin x holdonplot x cos x ro title y1 sin x y2 cos x 添加标题xlabel x 添加横坐标名legend sin x cos x 4 在右下角添加图例text pi sin pi x pi 在pi sin pi 处添加文字注释 4 MATLAB三维绘图 plot3是用来绘制三维曲线的 它的使用格式与二维绘图的plot命令很相似 语法 plot3 x y z s 绘制三维曲线plot3 x1 y1 z1 s1 x2 y2 z2 s2 绘制多条三维曲线说明 当x y z是同维向量时 则绘制以x y z元素为坐标的三维曲线 当x y z是同维矩阵时 则绘制三维曲线的条数等于矩阵的列数 s是指定线型 色彩 数据点形的字符串 例12三维曲线绘图 x 0 0 1 20 pi plot3 x sin x cos x 按系统默认设置绘图 立体图形绘制三维绘图可分为三个过程 生成平面网格点生成和绘制三维网格点处理三维表面 1 生成平面网格点语法 X Y meshgrid x y 说明 x是区间 x0 xm 上划分点组成的向量 y是区间 y0 yn 上划分点组成的向量 X Y是输出变量矩阵 矩阵X的行向量都是x 矩阵y的列向量都是y 例 X Y meshgrid 2 2 2 2 1 2 2 生成三维网格点语法 mesh x y z c 说明 x y z c是同维矩阵 x y z对应确定空间上的网格点 c为颜色矩阵 例 X Y meshgrid 2 2 2 2 2 2 Z X exp X 2 Y 2 mesh Z 3 三维表面处理对网格曲面的网格块区域着色就得到实曲面 mesh命令仅对网格线着色 而对网格片着色使用surf命令 surf的使用方式与mesh相同 例 X Y meshgrid 2 2 2 2 2 2 Z X exp X 2 Y 2 surf Z 三维表面处理效果 1 shadingfaceted 网格修饰 缺省方式例 peaks 30 2 shadingflat 去掉黑色线条 根据小方块的值确定颜色例 peaks 30 shadingflat 3 shadinginterp 颜色整体改变 根据小方块四角的值差补过度点的值确定颜色例 peaks 30 shadinginterp 例 peaks 30 shadinginterp colormap hot 例 set gcf color 000 X Y Z peaks 30 surfl X Y Z shadinginterp colormap cool axisoff 3 透视与消隐p peaks 30 mesh p hiddenon 等高线的绘制函数contour绘制二维等高线 用户可以指定等高线的条数 坐标系的比例及某值上的等高线 两者用法相同 例 等高线高程标示set gcf color 111 c h contour peaks clabel c h 1 M文件与函数2 变量与表达式3 数据类型4 程序结构5 程序调试 错误和异常处理6 M文件的优化和加速 二 MATLAB程序设计 1 M文件与函数 将MATLAB命令构成的程序存储成以m为扩展名的文件 然后再执行该程序文件 这种工作模式称为命令文件模式 MATLAB程序代码所编写的文件通常以 m 为扩展名 因此这些文件称为M文件 M文件是一个ASCII码文件 可以用任何字处理软件来编写 M文件有两种形式 M脚本文件和M函数文件 M函数文件是MATLAB程序设计的主流 MATLAB本身的一系列工具箱的各种内部函数就是M函数文件 用户可以为某种目的专门编写一组MATLAB函数文件组成工具箱 M文本编辑器建立一个新的M文件的方法是在MATLAB的命令窗口点击主菜单File下的New中的M file选项 接着就会出现MATLABEditor Debugger窗口 MATLABEditor窗口也可以在MATLAB的命令窗口中用Edit命令打开 M文件编辑器窗口会以不同的颜色显示注释 关键词 字符串和一般程序代码 可以方便地打开和保存M文件并进行编辑和调试 编辑功能有大多数编辑器都有的复制 粘贴 查找等 还设有书签 定位 清除工作空间和命令窗口 加注释 缩进等功能 脚本脚本是M文件里的简单函数和命令的集合 它们没有输入输出参数 类似于DOS下的批处理文件 脚本文件的特点 1 脚本文件中的命令格式和前后位置 与在命令窗口中输入的没有任何区别 2 MATLAB在运行脚本文件时 只是简单地按顺序从文件中读取一条条命令 送到MATLAB命令窗口中去执行 3 与在命令窗口中直接运行命令一样 脚本文件运行产生的变量都是驻留在MATLAB的工作空间 workspace 中 可以很方便地查看变量 除非用clear命令清除 脚本文件的命令也可以访问工作空间的所有数据 因此要注意避免变量的覆盖而造成程序出错 例13在M文件编辑 调试器窗口中编写M脚本文件绘制二阶系统的多条时域曲线 1 单击MATLAB桌面上的图标打开M文件编辑器 2 将命令全部写入M文件编辑器中 为了能标志该文件的名称 在第一行写入包含文件名的注释 保存文件为Ex13 m EX13二阶系统时域曲线x 0 0 1 20 y1 1 1 sqrt 1 0 3 2 exp 0 3 x sin sqrt 1 0 3 2 x acos 0 3 plot x y1 r 画阻尼系数为0 3的曲线holdony2 1 1 sqrt 1 0 707 2 exp 0 707 x sin sqrt 1 0 707 2 x acos 0 707 plot x y2 g 画阻尼系数为0 707的曲线y3 1 exp x 1 x plot x y3 b 画阻尼系数为1的曲线 3 选择M文件编辑器菜单 Debug Run 就可以在图形窗中看到所示的曲线 函数函数的使用与其它高级语言相似 MATLAB提供的各种工具几乎都是以函数的形式给出的 MATLAB的各个工具箱都是集成了相当多的专用函数而形成的 函数文件的特点 1 第一行总是以 function 引导的函数声明行 2 函数文件在运行过程中产生的变量都存放在函数本身的工作空间 3 当文件执行完最后一条命令或遇到 return 命令时 就结束函数文件的运行 同时函数工作空间的变量就被清除 4 函数的工作空间随具体的M函数文件调用而产生 随调用结束而删除 是独立的 临时的 在MATLAB运行过程中可以产生任意多个临时的函数空间 函数文件格式函数声明行的格式 function 输出变量列表 函数名 输入变量列表 函数文件的一般结构 函数定义行文件的第一行 定义函数名 输入输出参数的数量和名称 H1行帮助信息的第一行 紧跟定义行之后 函数说明H1行以后 函数主体以前的帮助信息 函数主体函数中进行真正计算和输出赋值等工作的代码 注释函数体中用 引导的对程序的注释 例14在M文件编辑 调试器窗口编写计算二阶系统时域响应的M函数文件 并在MATLAB命令窗口中调用该文件 创建M函数文件并调用的步骤如下 1 编写函数代码functiony Ex014 zeta EX014画二阶系统时域曲线x 0 0 1 20 y 1 1 sqrt 1 zeta 2 exp zeta x sin sqrt 1 zeta 2 x acos zeta plot x y 2 将函数文件保存为 Ex014 m 3 在MATLAB命令窗口输入以下命令 则会出现f的计算值和绘制的曲线 f Ex014 0 3 程序分析 第一行指定该文件是函数文件 文件名为 Ex014 输入参数为阻尼系数zeta 输出参数为时域响应y MATLAB的搜索过程 例 假设MATLAB执行指令cow 1 检查cow是否是变量名 2 是否是内建函数 Built inFunction 3 是否是cow所在M文件的一个子函数 4 是否是cow所在M文件的一个私有函数 5 是否是当前目录上的文件 6 搜索路径上是否有cow存在 2 变量与表达式 MATLAB的变量与类型 1 变量命名规则变量名和函数名对字母的大小写敏感 变量名的第一个字符必须是一个英文字母 最多可包括31个字符 变量名可由英文字母 数字和下划线混合组成 变量名中不得包含空格和标点 但可以由下连字符 2 局部变量和全局变量局部变量 具有函数内部作用范围全局变量 可在几个函数和基本工作空间之间共享 具有全局作用范围全局变量的声明 global变量名1变量名2 变量名间用空格分离 全局变量在使用前必须在MATLAB工作空间中申明 而在某个具体的MATLAB函数中如果想用到该全局变量时 也必须在函数中申明 由于全局变量损害函数的封闭性 因此不提倡使用全局变量 3 永久变量又称预定义变量 PredefinedVariable ans eps pi realmax realmin i j nargin nargout inf NaN computer flops version注 尽可能不对永久变量重新赋值 以免产生混淆 MATLAB基本表达式变量 表达式MATLAB书写表达式的规则与 手写算式 几乎相同 例 20 3 3 9 sin x y sin x cos x x y z peaks 3 数据类型字符串数组 单元数组和结构数组 最常用的数据类型只有双精度型和字符型 其他数据类型只在一些特殊条件下使用 4 MATLAB程序结构 1 顺序结构 2 循环结构 3 分支结构顺序结构顺序结构就是依照顺序执行程序的各条语句 语句在程序文件中的位置反映了程序的执行顺序 循环结构 a for end循环语法为 forx array可执行语句end循环执行的次数为固定的 循环次数由数组 array 的列数决定 例 forii 1 10 x ii ii end x 12345678910 说明 for循环不会因为在循环体内对循环变量重新赋值而终止 for循环结构可按需要嵌套使用 技巧 为得到高效代码 尽量提高代码的向量化程度 避免使用循环结构 为得到最快的运算速度 在循环指令前尽量对数组进行预定义 例15利用for循环求1 2 3 5 的值sum 0 fori 1 5pdr 1 fork 1 ipdr pdr k endsum sum pdr end sum 153 while end循环while循环将循环体中的语句循环执行不定次数 语法为 while表达式循环体语句end说明 1 表达式一般是由逻辑运算和关系运算以及一般运算组成的 以判断循环的进行和停止 2 只要表达式的值非0 继续循环 直到表达式值为0 循环停止 例16用while循环求1 100间整数的和sum 0 i 1 whilei 100sum sum i i i 1 endsumsum 5050 分支结构if else end分支结构if else end语句有3种形式 if表达式执行语句end if表达式 是语句1else 否语句2end if表达式1语句1elseif表达式2语句2elseif表达式3语句3 else语句nend说明 这种结构实现了一种多路选择 比较复杂 可替代一般高级语言中的switch case end语句 x 3 0 1 3 ifx 1y 2 x 2 plot x y elseif 1 x 1y 0 plot x y elsey x 3 plot x y end 例17编写m函数 计算函数值并绘图 switch case end分支结构switch开关表达式case表达式1语句段1case表达式2语句段2 otherwise语句段nend 说明 将开关表达式依次与case后面的表达式进行比较 如果表达式1不满足 则与下一个表达式2比较 如果都不满足则执行otherwise后面的语句段n 一旦开关表达式与某个表达式相等 则执行其后面的语句段 开关表达式只能是标量或字符串 case后面的表达式可以是标量 字符串或单元数组 如果是单元数组则将开关表达式与单元数组的所有元素进行比较 只要某个元素与开关表达式相等 就执行其后的语句段 流程控制语句在程序执行中 有一些可以控制程序流程的命令 下面主要介绍break continue return pause keyboard和input命令 a break命令break命令可以使包含break的最内层的for或while语句强制终止 立即跳出该结构 执行end后面的命令 break命令一般和if结构结合使用 例18判定字符串method Bilinear 的值switchlower method 将字符串转换为小写case linear bilinear disp Methodislinear 显示case cubic disp Methodiscubic case nearest disp Methodisnearest otherwisedisp Unknownmethod end 例19计算1 3 5 100的值 当和大于1000时终止计算 EX019用break终止while循环sum 0 n 1 whilen 100ifsum 1000sum sum n n n 2 elsebreakendendsumn程序分析 while end循环结构嵌套If else end分支结构 当sum为1024时跳出while循环结构 终止循环 b continue命令continue命令用于结束本次for或while循环 只结束本次循环而继续进行下次循环 c return命令return命令是终止当前命令的执行 并且立即返回到上一级调用函数或等待键盘输入命令 可以用来提前结束程序的运行 注意 当程序进入死循环 则按Ctrl break键来终止程序的运行 d pause命令pause命令用来使程序运行暂停 等待用户按任意键继续 语法 pause 暂停pause n 暂停n秒 5 keyboard命令keyboard命令用来使程序暂停运行 等待键盘命令 执行完自己的工作后 输入return语句 程序就继续运行 6 input命令input命令用来提示用户应该从键盘输入数值 字符串和表达式 并接受该输入 a input inputanumber 输入数值给ainputanumber 45a 45b input inputanumber s 输入字符串给binputanumber 45b 45input inputanumber 将输入值进行运算inputanumber 2 3ans 5 5 文件调试 错误和异常处理 M文件调试的主要功能 1 编辑 调试器的调试功能语法错误 变量名 函数名的误写及标点符号的缺 漏 运行错误 由算法本身引起对语法错误 MATLAB在运行时可立即发现 终止运行 给出相应的错误原因及所在行号 2 调试方法直接调试法 使用命令行调试 图形调试法 异常处理应用程序在运行时可能会出现一些错误 从而产生一些意想不到的结果 称为出现异常 在程序中有一些专门用于处理这些错误的代码 称之为异常的捕获和处理 在MATLAB中可通过try catch模块来进行异常的捕获和处理 语法 try语句组1catch语句组2end try语句先试探性执行语句组1 如果语句组1在执行过程中出现错误 则将错误信息赋给保留的lasterr变量 并转去执行语句组2 错误报告try catch模块可用来捕获和处理异常 但多数情况下仅需报告错误和结束程序运行即可 此时可用error函数 使用error函数可报告错误并将程序进程挂起 通过error函数制定一定信息用于出现错误时显示 如 ifn 1error nmustbe1orgreater end使用error函数还可将信息以格式化字符串的形式显示 此时和MATLAB函数sprintf相似 语法为 error formatted errormsg arg1 arg2 6 M文件的优化和加速 P码文件M文件都是文本文件 MATLAB源代码都能看到 若希望程序的保密性好且运行速度快 可将M脚

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论