数值分析上机实验指导书

在M函数内,nargin表示该函数的输入变量个数,nargout表示该函数的输出变量个数。

(7)提高速度

MATLAB软件主要缺点是执行循环语句时速度慢。好的M程序文件应尽量使用数组运算和内部函数,少用循环语句,以提高运算速度。尽管MATLAB数组无须定义尺寸,但经常改变数组尺寸会影响速度,采取一些预分配方法可提高运算速度。另外,减少运行过程中不必要的结果显示也可提高速度。

(8)强行中断

使用快捷键Ctrl+C可以强行中断程序运行。

例3 编写一个M函数,对于任意输入的向量x,可以计算下列分段函数值构成的向量:

?x2,x?1?f(x)??1,?1?x?1

?3?2x,x??1?%M函数naega_3a.m function y=naega_3a(x) n=length(x); for i=1:n if x(i)>1 y(i)=x(i)^2; elseif x(i)>-1 y(i)=1; else y(i)=3+2*x(i); end end %M函数naega_3b.m function y=naega_3b(x) y=zeros(size(x)); k1=find(x>1);y(k1)=x(k1).^2; k2=find(x>-1&x<=1);y(k2)=1; k3=find(x<=-1);y(k3)=3+2*x(k3); 程序naega_3a.m是按通常思路所编程序,可读性好,但速度慢。程序naeag_3b.m是根据MATLAB数组运算设计的程序,程序简短且速度快,数组维数越高,效率改进越显著。下列程序中tic表示计时开始,toc为读数。

>>clear;tic;x=-2:0.0005:2;y=naega_3a(x);toc %时间因电脑不同而有区别 elapsed_time = 1.0400

>> clear;tic;x=-2:0.0005:2;y=naega_3b(x);toc elapsed_time = 0.4400

33

六、作图

表7 常用作图命令和函数 主题词 含 义 主题词 含 义 plot 基本二维图形 clabel 等高线高度标志 fplot 一元函数图像 grid 格栅 ezplot 画二维曲线的符号命令 hold 图形保持 plot3 空间曲线 axis 定制坐标轴 meshgrid 网格数据生成 view 改变视点 mesh 网面图 subplot 子图 surf 曲面图 figure 新图形窗口 contour 等高线图 clf 清除图形 contour3 三维等高线图 close 关闭图形窗口 title 标题 ylabel y轴说明 xlabel x轴说明 zlabel z轴说明 1.曲线图 plot(x,y) 作出以数据(x(i),y(i))为节点的折线图,其中x,y为同长度的向量 fplot('fun',[a,b]) 作出函数fun在区间[a,b]上的函数图,fun可以是M函数主名,也可是字符串 ezplot(fun,lims) 绘制字符串fun(可是显函数、隐函数或参数方程)指定的函数 plot3(x,y,z) 空间曲线图,其中x,y,z为同长度向量 >> plot([1 4 2 5],[1 3 -1 2]) 依次将(1,1),(4,3),(2,-1),(5,2)连接起来得一条折线(图2) 图2

图形显示在图形窗口。在图形窗口可以使用File菜单保存(Save)为M文件,导出(Export)为图形文件。也可利用图形窗口Edit菜单Copy figure作为图片复制到剪贴板,从而进一步粘贴到Word或其他应用程序中。

图形的线型、标记、颜色均可根据要求设定。常用的见表8

34

b g r m y k 颜色 蓝(默认) 绿 红 洋红 青 黑

表8 图形元素设定 线型 - 实线(默认) : 虚线 -. 点划线 -- 划线 0.2 . o x + * 标记 无标记(默认) 点 圈 叉 十字 星 例4 两个一元函数y?x3?x?1和y?xsin(5x)在区间-1

% M文件naega_4.m

fplot('x^3-x-1',[-1,2]);

hold on; %在作下一幅图时保留已有图像 x=-1:0.2:2;

y=abs(x).^2.*sin(5*x); %注意数组运算 plot(x,y,':ro');

hold off; %释放hold on

2.曲面图 [x,y]=meshgrid(xa,ya) 当xa,ya分别为m维和n维行向量,得到x和y均为n行m列矩阵。meshgrid常用于生成X-Y平面上的网格数据 mesh(x,y,z) 绘制网面图,是最基本的曲面图形命令,其中x,y,z是同阶矩阵,表示曲面三维数据 surf(x,y,z) 绘制曲面图,与mesh用法类似 contour(x,y,z) 绘制等高线图,与mesh用法类似 contour3(x,y,z) 绘制三维等高线图,与mesh用法类似 例如: >> xa=6:8;ya=1:4; %生成x,y各自的节点 >> [x,y]=meshgrid(xa,ya); %生成X-Y面上网格

35

>> z=x.^2+y.^2; %计算X-Y面上各网格点的z轴高度 >> mesh(x,y,z) >> [x,y,z] ans =

6 7 8 1 1 1 37 50 65 6 7 8 2 2 2 40 53 68 6 7 8 3 3 3 45 58 73 6 7 8 4 4 4 52 65 80 这3组数据构成空间网面的12格点坐标

例5 二元函数图z?xexp(?x2?y2) %M文件 naega_5.m

clear;close;

% close关闭当前图形窗口

xa=-2:0.2:2;ya=xa; [x,y]=meshgrid(xa,ya); z=x.*exp(-x.^2-y.^2); mesh(x,y,z);pause %网格图,pause暂停直到按任意键 surf(x,y,z);pause %网面图 contour(x,y,z);pause %等高线图

contour(x,y,z,[0.1 0.1]); %z=0.1的一条等高线

36

联系客服:779662525#qq.com(#替换为@)