第二章 MATLAB编程与作图 2.1 程序设计 2.2 作图 2.3 在线帮助和文件管理 2.4 习题 2019年4月23日 2.1 程序设计 2.2 作图 2.3 在线帮助和文件管理 2.4 习题 2019年4月23日 东华大学 MATLAB数学实验
2.1 程序设计 控制流 M脚本文件 函数文件 函数句柄、内嵌函数和匿名函数 其它 2019年4月23日 东华大学 MATLAB数学实验
控制流-选择结构 一、if语句 单分支if语句: if 条件 语句组 end 双分支if语句: 语句组1 else 语句组2 例:计算分段函数值 x=input('请输入x的值:'); if x==10 y=cos(x+1)+sqrt(x*x+1); else y=x*sqrt(x+sqrt(x)); end y 2019年4月23日 东华大学 MATLAB数学实验
二、switch语句 switch 表达式 case 表达式1 price=input('请输入商品价格:'); 语句组1 例:已知打折标准(x<200元,原价; 200元 =<x<500元, 九五折; x>=500元,八五折),求所售商品的实际销售价格。 price=input('请输入商品价格:'); switch fix(price/100) case {0,1} rate=1; case {2,3,4} rate=95/100; otherwise rate=85/100; end price=price*rate switch 表达式 case 表达式1 语句组1 case 表达式2 语句组2 …… case 表达式m 语句组m otherwise 语句组m+1 end 2019年4月23日 东华大学 MATLAB数学实验
三、try语句 try 语句组1 catch 语句组2 end try语句先试探性执行语句组1,如果语句组1在执行过程中出现错误,则将错误信息赋给保留的lasterr变量,并转去执行语句组2。 2019年4月23日 东华大学 MATLAB数学实验
例:矩阵乘法运算要求两矩阵的维数相容,否则会出错。先求两矩阵的乘积,若出错,则自动转去求两矩阵的点乘(数组运算)。 A=[1,2,3;4,5,6]; B=[7,8,9;10,11,12]; try C=A*B; %若A是m*n,则要求B是n*m catch C=A.*B; %若A是m*n,则要B也是m*n end C lasterr %显示出错原因 2019年4月23日 东华大学 MATLAB数学实验
控制流-循环结构 一、for语句 for 循环变量=表达式1:表达式2:表达式3 循环体语句 end 初值 增量 终值 例:已知y的表达式,当n=100时,求y的值。 y=0;n=100; for i=1:n y=y+1/i/i; end y 默认增量为1 2019年4月23日 东华大学 MATLAB数学实验
for语句更一般的格式: for 循环变量=矩阵表达式 循环体语句 end 矩阵按列分块, 逐行相加 例:已知5个学生4门功课的成绩,求每名学生的总成绩。 s=0; a=[65,76,56,78;98,83,74,85;76,67,78,79;98,58,42,73;67,89,76,87]; for k=a s=s+k; end 矩阵按列分块, 逐行相加 2019年4月23日 东华大学 MATLAB数学实验
二、while语句 while (条件) 循环体语句 end break语句:当在循环体内执行到该语句时,程序将跳出循环 例: clear; t=0; n=1; while (n<=100) t=t+1/n/n; n=n+1; end t 问题: 如果去掉"n=n+1", 会出现什么情况? 2019年4月23日 东华大学 MATLAB数学实验
M脚本文件 M文件的建立与编辑 (1)菜单操作:File菜单 → New菜单项 → M-file命令。 (2)命令操作:在命令窗口输入命令edit。 (3)命令按钮操作:单击工具栏上的“新建”命令按钮。 注意: 文件名一律以字母开头,以字母、数字或下划线组成,不要含有空格、减号等, 不要和变量名冲突; M文件名一般都用小写字母; 保存在当前目录(Current Directory) 2019年4月23日 东华大学 MATLAB数学实验
分类:脚本文件(Script File)(或称命令文件)和函数文件(Function File) 主要区别: M文件的分类 分类:脚本文件(Script File)(或称命令文件)和函数文件(Function File) 主要区别: 1、M脚本文件没有参数传递功能; 函数文件有参数传递功能。 2、M脚本文件中的变量是全局的,在命令窗口也可用; 但命令窗口的变量在M脚本文件中不可用; 函数文件中的变量是局部的。 2019年4月23日 东华大学 MATLAB数学实验
例: 建立一个函数文件将变量a,b的值互换,然后在命令窗口调用该函数文件。 建立一个命令文件将变量a,b的值互换,然后运行该命令文件。 首先建立命令文件并以文件名exch.m存盘: a=1:10; b=[11,12,13,14;15,16,17,18]; c=a;a=b;b=c; a, b 然后在MATLAB的命令窗口中输入exch。 建立一个函数文件将变量a,b的值互换,然后在命令窗口调用该函数文件。 先建立函数文件fexch.m: function [a,b]=exch(a,b) c=a;a=b;b=c; 在命令窗口调用该文件: x=1:10; y=[11,12,13,14;15,16,17,18]; [x,y]=fexch(x,y) 调用文件名 2019年4月23日 东华大学 MATLAB数学实验
函数文件 函数文件的基本结构 function 输出形参表=函数名(输入形参表) 函数体语句 函数文件名:函数文件名与函数名也可以不相同。当两者不同时,MATLAB将忽略函数名而确认函数文件名,因此调用时使用函数文件名。 若一个文件中定义了多个函数,则只有第一个函数作为主函数可以被外部调用;其它函数作为子函数只能被同一个文件中的主函数或其它子函数调用,而不能被外部调用。 2019年4月23日 东华大学 MATLAB数学实验
*函数句柄、内联函数和匿名函数 使用函数句柄(handle)方式调用M函数。命令feval用于执行函数的参数方式。例如 >>fhandle=@fexch; [a,b]=feval(fhandle,x,y) >>[a,b]=feval('fexch',x,y) 内联(inline)函数方式: fun=inline(expr, arg1, arg2, ...) 其中expr为函数表达式字符串, arg1, arg2, ...为自变量。例如 >> fname=inline('sum(1./(1:n).^2)','n'); >> feval(fname,100) 表达式 参数 2019年4月23日 东华大学 MATLAB数学实验
其它-数据的输入输出 input函数: 提示用户输入数据 求ax2 +bx+c=0的根。 A=input(提示信息,选项); 程序如下: a=input('a=?'); b=input('b=?'); c=input('c=?'); d=b*b-4*a*c; x=[(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a)]; disp(['x1=',num2str(x(1)),',x2=',num2str(x(2))]); disp函数:屏幕输出 disp(输出项) 注意:输出项既可以为字符串, 也可以为矩阵; 用disp函数显示矩阵时不显 示矩阵的名字,其格式更紧密, 不留任何无意义的空行。 2019年4月23日 东华大学 MATLAB数学实验
其它-全局变量和局部变量 函数文件的内部变量默认是局部的。 全局变量用命令global定义。 例:建立函数文件wadd.m,将输入参数加权相加。 function f=wadd(x,y) global ALPHA BETA f=ALPHA*x+BETA*y; 命令窗口:global ALPHA BETA ALPHA=1; BETA=2; s=wadd(6,9) 2019年4月23日 东华大学 MATLAB数学实验
其它-nargin与nargout 在调用函数时,MATLAB用两个永久变量: nargin:记录调用函数时输入实参个数; 例:函数文件exam_arg.m: function [f1,f2]=exam_arg(a,b,c) if nargin==1 f1=a; elseif nargin==2 f1=(a*b)/2; elseif nargin==3 f1=(a*b*c)/3; elseif nargin > 3 error('too many arguments.'); end if nargout==0 error('No output argument.'); elseif nargout==2 f2=2; 2019年4月23日 东华大学 MATLAB数学实验
*其它-提高速度 多用数组和内部函数,少用循环,以提高速度。 例2.4: 2019年4月23日 东华大学 MATLAB数学实验
2.2 作图 曲线图 曲面图 图形说明和定制 菜单和工具栏的使用 2019年4月23日 东华大学 MATLAB数学实验
1、曲线图 绘制曲线的最基本函数: plot(x,y) :x和y为长度相同的向量,分别用于存储x坐标和y坐标数据。 plot(x1,y1,选项1,x2,y2, 选项2,…,xn,yn,选项n) :多 组折线 plot3(x1,y1,z1,选项1,…,xn,yn,zn,选项n) :空间曲线 fplot(‘fun’,[a,b]):绘制fun在区间[a,b]上的图形,fun 可以是函数或表达式 可选,表示折线的属性,如颜色、粗细等 2019年4月23日 东华大学 MATLAB数学实验
例: 1) 绘制三维参数曲线: t=0:pi/50:2*pi; x=8*cos(t);y=4*sqrt(2)*sin(t); 1) 绘制三维参数曲线: t=0:pi/50:2*pi; x=8*cos(t);y=4*sqrt(2)*sin(t); z=-4*sqrt(2)*sin(t); plot3(x,y,z,'p'); 五角形 2019年4月23日 东华大学 MATLAB数学实验
例: 2) 在0≤X≤2区间内,绘制曲线y=2e-0.5xsin(2πx) 程序如下: x=0:pi/100:2*pi; y=2*exp(-0.5*x).*sin(2*pi*x); plot(x,y,'r*') %分别以x,y对应的元素为横、纵坐标绘制曲线。 图形导出方法:1、File->Save->图形文件 2、Edit->Copy figure->粘贴到指定文件 2019年4月23日 东华大学 MATLAB数学实验
例: 在[-1,2]上画的 图形 解 先建M文件myfun1.m: function Y=myfun1(x) 在[-1,2]上画的 图形 解 先建M文件myfun1.m: function Y=myfun1(x) Y=exp(2*x)+sin(3*x.^2) 命令窗口: fplot(‘myfun1’,[-1,2]) 2019年4月23日 东华大学 MATLAB数学实验
平面网格坐标的生成 2、 曲面图形 绘制三维曲面的函数 x,y,z是同阶矩阵, 表示曲面的三维 坐标数据 x=a:dx:b; y=c:dy:d; [X,Y]=meshgrid(x,y); 绘制三维曲面的函数 x,y,z是同阶矩阵, 表示曲面的三维 坐标数据 mesh(x,y,z):网格图; surf(x,y,z): 曲面图(填充网格); contour(x,y,z):等高线图(平面图); contour3(x,y,z):三维等高线图(空间图)。 2019年4月23日 东华大学 MATLAB数学实验
M文件eg2_6.m 例2.6 : xa=-2:0.2:2;ya=xa; [x,y]=meshgrid(xa,ya); z=x.*exp(-x.^2-y.^2); mesh(x,y,z);pause(2) surf(x,y,z);pause(2) contour(x,y,z);pause contour3(x,y,z);pause contour(x,y,z,[0.1 0.1]); contour3(x,y,z,[0.2 0.2]); 等待2秒 网格图 等待,直到用户按下任意键 填充网格 平面等高线 绘制z=0.2的等高线 立体等高线 2019年4月23日 东华大学 MATLAB数学实验
3、图形说明和图形定制 图形标注 title(图形名称) xlabel(x轴说明) ylabel(y轴说明) 坐标控制 hold on/off 保留/释放现有图形; figure/close 新开/关闭图形窗口; grid on/off 画/不画网格线,不带参数的grid命令在两种状态之间进行切换。 box on/off 加/不加边框线,不带参数的box命令在两种状态之间进行切换。 axis on/off 显示/取消坐标轴 axis([xmin xmax ymin ymax zmin zmax]) 限定坐标轴范围 2019年4月23日 东华大学 MATLAB数学实验
图形窗口的分割subplot(m,n,p) 例:在一个窗口中同时绘制正弦、余弦等曲线。 x=linspace(0,2*pi,60); y=sin(x);z=cos(x); subplot(2,2,1); %选择2×2区中的1号区 plot(x,y); title('sin(x)'); axis ([0,2*pi,-1,1]); subplot(2,1,2); %选择2×1区中的2号区 plot(x,z, '*'); title('cos(x)'); axis ([0,2*pi,-1,1]); x=linspace(-2,2,60); y=x.^3;z=x.^2; subplot(4,4,3); %选择4×4区中的3号区 plot(x,y); title('x.^3'); axis ([-2,2,-4,4]); subplot(4,4,4); %选择4×4区中的4号区 plot(x,z); title('x.^2'); axis ([-2,2,0,4]); 2019年4月23日 东华大学 MATLAB数学实验
2.3 在线帮助和文件管理 在线帮助 1、 help命令 是最基本的查询方法,可查询所有目录、指定目录、命令、函数。 2.3 在线帮助和文件管理 在线帮助 1、 help命令 是最基本的查询方法,可查询所有目录、指定目录、命令、函数。 2、lookfor 关键字: 搜索相关的命令和函数; 3、type M文件名:显示M文件代码; 4、which M文件名:显示指定文件的路径; 5、demo:演示matlab功能; 2019年4月23日 东华大学 MATLAB数学实验
文件和目录管理 MATLAB只执行当前目录和搜索路径中的命令和函数; 当前目录(Current directory)窗口列出了当前目录的程序和数据文件等,可以修改当前路径; 菜单Files\Set path可将某一目录增加到MATLAB默认搜索路径(Path)队列; 2019年4月23日 东华大学 MATLAB数学实验
2.4 练习 1、在[0,2*pi]上画 的图形。 2、在区间[0,10*pi]画参数曲线x=sin(t),y=cos(t), z=t 2.4 练习 1、在[0,2*pi]上画 的图形。 2、在区间[0,10*pi]画参数曲线x=sin(t),y=cos(t), z=t , 3、画出曲面Z=(X+Y).^2的网格图。 2019年4月23日 东华大学 MATLAB数学实验
1、 >> t=0:pi/50:2*pi; >> x=cos(t).^3;y=sin(t).^3; >> plot(x,y); 2、t=0:pi/50:10*pi; plot3(sin(t),cos(t),t) 3、x=-3:0.1:3; y=1:0.1:5; [X,Y]=meshgrid(x,y); Z=(X+Y).^2; mesh(X,Y,Z) 2019年4月23日 东华大学 MATLAB数学实验