《matlab与数值分析课件:matlab绘图与编程(3)》由会员分享,可在线阅读,更多相关《matlab与数值分析课件:matlab绘图与编程(3)(63页珍藏版)》请在金锄头文库上搜索。
1、MATLAB绘图与程序设计基本知识,一 绘图,二维和三维基本绘图命令,Matlab图形窗口,Matlab有用于图形输出的专用窗口,称为图形窗口。所有的绘图命令将把图象输出到当前窗口,若在命令执行前,当前窗口已经存在图形,则原图形将被新图象覆盖掉。,二维平面图形的绘制,plot 最基本的二维图形指令,plot的功能: plot命令自动打开一个图形窗口Figure 用直线连接相邻两数据点来绘制图形 根据图形坐标大小自动缩扩坐标轴,将数据标尺及单位标注自动加到两个坐标轴上,可自定坐标轴,可把x, y 轴用对数坐标表示,线性坐标曲线 plot plot(y): 参数y为向量,以y的值为纵坐标,y的下标
2、为横坐标。,例1:x=0, 0.48,0.84,1,0.91,0.6,0.14 plot (x),plot(x,y) :参数x,y为向量,以x为横坐标,以y为纵坐标。 注意:x,y的长度必须相等 例:t=0:0.001:2*pi; y=cos(t); plot(t,y),plot(Y)参数Y为mn的矩阵。该命令把矩阵Y转化为长度为m的n个向量,然后对n个向量划出n条线。 例:y=5 4 4 8 9 10; 3 4 4 5 8 2; 8 5 7 9 6 25; 9 8 8 9 6 7 plot(y),复向量式 plot(Z):当z为一个复向量时,该命令等价于plot(real(Y),imag(Y
3、);其它情况忽略z的虚部。 例:t=0:0.1:3*pi; x=t+i*cos(t); plot(x); figure; plot(t,x),综合调用方式plot(x1,y1,x2,y2,)该命令可以在同一窗口绘制多条曲线。 例: t=0:0.1:3*pi; x=t+i*cos(t); plot(real(x),imag(x),t,x),三维绘图可分为三个过程: 生成平面网格点 生成和绘制三维网格点 处理三维表面。,三维曲面绘图,生成平面网格点 X,Y=meshgrid(x,y) x 是区间x0,xm上划分点组成的向量; y 是区间y0,yn上划分点组成的向量; X,Y是输出变量矩阵,矩阵X的
4、行向量都是x,矩阵y的列向量都是y。 例: X,Y=meshgrid(-2:2:2,-2:1: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),三维表面处理 对网格曲面的网格块区域着色就得到实曲面。mesh命令仅对网格线着色,而对网格片着色使用surf命令。surf的使用方式与mesh相同。 例:X,Y=meshgrid(-2:.2:2,-2:.2:2); Z=X.*exp(-X.2-Y.2); s
5、urf(Z);,函数contour绘制二维等高线。用户可以指定等高线的条数、坐标系的比例及某值上的等高线,两者用法相同.,等高线的绘制,shading faceted 网格修饰,缺省方式,shading flat 去掉黑色线条,根据小方块的值确定颜色,shading interp 颜色整体改变,根据 小方块四角的值差补过度点的值确定颜色,peaks(30);shading interp;colormap(hot),X,Y,Z=peaks(30);surfl(X,Y,Z)shading interp;colormap(cool);axis off,透视与消隐 p=peaks(30);mesh(p
6、);hidden on,作业:,绘出二元函数 的三维图形。并根据你的兴趣,对图形做出适当的修饰。,M文件类型 命令文件(脚本文件script-file) 函数文件(function-file),二 编程,命令文件格式 注解运行命令 将matlab命令构成的程序存储成以m为扩展名的文件,然后再执行该程序文件,这种工作模式称为命令文件模式。 程序文件不能在指令窗口下建立,因为指令窗口只允许一次执行一行上的一个或几个语句。,例: % 画出花瓣 theta=-pi:0.01:pi; rho(1,:)=2*sin(5* theta).2; polar(theta,rho(1,:) %极坐标绘图,函数定义
7、行 文件的第一行,定义函数名,输入输出参数的数量和名称。 H1行 帮助信息的第一行,紧跟定义行之后。 函数说明 H1行以后,函数主体以前的帮助信息。 函数主体 函数中进行真正计算和输出赋值等工作的代码。 注释 函数体中用引导的对程序的注释。,函数文件格式 函数文件的一般结构:,例: function k=rank(x) %RANKNumber of linearly independent rows or columns. %K = RANK(X) is the number of singular values of X %that are larger than MAX(SIZE(X) *
8、 NORM(X) * EPS. %K = RANK(X,tol) is the number of singular values of X that %are larger than tol. %Copyright (c) 1984-94 by The MathWorks, Inc. s = svd(x); if (nargin = 1) tol = max(size(x) * max(s) * eps; end r = sum(s tol);,程序部分,M文件的编辑环境 Matlab自身提供的M文件编辑器; 一般的文字编辑器,如写字板、记事本和Word等,保存为文本文件,后缀为.m。,注:
9、 运行m文件之前,必须将文件放在MATLAB的搜索路径上,尽量使函数定义名与函数文件名一致。 两者不一致时,MATLAB将忽略函数定义行的函数定义名,而以保存文件名为准。 H1行做好用英文表达,利于关键字查询。,MATLAB的搜索过程:,例:假设MATLAB执行指令cow 1.检查cow是否是变量名。 2.是否是内建函数(Built_in Function)。 3.是否是cow所在M文件的一个子函数。 4.是否是cow所在M文件的一个私有函数。 5.是否是当前目录上的文件。 6.搜索路径上是否有cow存在。,MATLAB 的变量与表达式,MATLAB的变量与类型 变量命名规则 变量名和函数名对
10、字母的大小写敏感; 变量名的第一个字符必须是一个英文字母,最多可包括31个字符; 变量名可由英文字母、数字和下划线混合组成; 变量名中不得包含空格和标点,但可以由下连字符,局部变量:具有函数内部作用范围 全局变量:可在几个函数和基本工作空间之间共享,具有全局作用范围 全局变量的声明: global 变量名1 变量名2 变量名间用空格分离。 全局变量在使用前必须在MATLAB工作空间中申明,而在某个具体的MATLAB函数中如果想用到该全局变量时,也必须在函数中申明。 由于全局变量损害函数的封闭性,因此不提倡使用全局变量。,局部变量和全局变量,永久变量 又称预定义变量(Predefined Var
11、iable) ans; eps; realmax; realmin; pi; i,j; inf; NaN; compter; flops; version; 注:尽可能不对永久变量重新赋值,以免产生混淆,MATLAB基本表达式 表达式 变量=表达式 MATLAB书写表达式的规则与“手写算式”几乎相同。,例: 20.3+3.9*sin(x); y=sin(x)+cos(x); x, y ,z=peaks,字符串数组、单元数组和结构数组,数据类型:,最常用的数据类型只有双精度型和字符型,其他数据类型只在一些特殊条件下使用,MATLAB 程序结构,顺序结构 循环结构 分支结构,顺序结构 顺序结构就是
12、依照顺序执行程序的各条语句。语句在程序文件中的位置反映了程序的执行顺序。,循环结构 for-end循环 语法为: for x =array 可执行语句 end,循环执行的次数为固定的。 循环次数由数组(array)的列数决定。 例: for ii=1:10; x(ii)=ii; end; x = 1 2 3 4 5 6 7 8 9 10,说明: for循环不会因为在循环体内对循环变量重新赋值而终止; for循环结构可按需要嵌套使用。 技巧: 为得到高效代码,尽量提高代码的向量化程度,避免使用循环结构; 为得到最快的运算速度,在循环指令前尽量对数组进行预定义,例:利用for循环求1!+2!+3!
13、+ +5!的值 sum=0; for i=1:5 pdr=1; for k=1:i pdr=pdr*k; end sum=sum+pdr; end,sum = 153,while-end循环 while循环将循环体中的语句循环执行不定次数。 语法为: while 表达式 循环体语句 end,表达式一般是由逻辑运算和关系运算以及一般运算组成的,以判断循环的进行和停止; 只要表达式的值 非0,继续循环;直到表达式值为0,循环停止。,例:用while循环求1100间整数的和 sum=0; i=1; while i=100 sum=sum+i; i=i+1; end sum sum = 5050,分支
14、结构 if-else-end分支结构,if else end语句有3种形式 if 表达式 执行语句 end if 表达式 是 语句1 else 否 语句2 end, if 表达式1 语句1 elseif 表达式2 语句2 elseif 表达式3 语句3 else 语句n end,这种结构实现了一种多路选择,比较复杂。可替代一般高级语言中的switch-case-end语句,例:编写m函数,计算函数值并绘图,x=-3:0.1:3; if x=1 y=2*x.2; plot(x,y) elseif -1x1 y=0; plot(x,y) else y=-x.3; plot(x,y) end 对吗?
15、,正确方法 x1=-3:0.1:-1; y1=-x1.3; x2=-1:0.1:1; y2=x2.*0; x3=1:0.1:3; y3=2.*x3.2; x=x1,x2,x3; y=y1,y2,y3; plot(x,y),switch-case-end分支结构 switch 开关表达式 case 表达式1 语句段1 case表达式2 语句段2 . otherwise 语句段n end,说明: 将开关表达式依次与case后面的表达式进行比较,如果表达式1不满足,则与下一个表达式2比较,如果都不满足则执行otherwise后面的语句段n;一旦开关表达式与某个表达式相等,则执行其后面的语句段。 开关表达式只能是标量或字符串。 case后面的表达式可以是标量、字符串或单元数组,如果是单元数组则将开关表达式与单元数组的所有元素进行比较,只要某个元素与开关表达式相等,就执行其后的语句段。,例:,method = Bilinear; switch lower(method) %将字符串转换为小写 case linear,bilinear disp(Method is linear) %显示 case cubic disp(Method is cubic) case nearest disp(Method is ne