当前位置:首页 > n6ch07
第七章 M文件和函数句柄
7.1 7.2
7.2.1
M文本编辑器 MATLAB控制流
for循环结构
【例7.2-1】一个简单的for循环示例。
for ii=1:10;
x(ii)=ii; end;
x x =
1 2 3 4 5 6 7 8 9 10
7.2.2 while循环结构
【例7.2-2】Fibonacci数组的元素满足Fibonacci 规则:ak?2?ak?ak?1 ,(k?1,2,?);且
a1?a2?1。现要求该数组中第一个大于10000的元素。
a(1)=1;a(2)=1;i=2; while a(i)<=10000 a(i+1)=a(i-1)+a(i); i=i+1; end;
i,a(i), i =
21 ans =
10946
7.2.3 if-else-end分支结构
【例7.2-3】一个简单的分支结构。
cost=10;number=12; if number>8
sums=number*0.95*cost; end,sums sums =
114.0000
【例7.2-4】用for循环指令来寻求Fibonacc数组中第一个大于10000的元素。
n=100;a=ones(1,n); for i=3:n
a(i)=a(i-1)+a(i-2); if a(i)>=10000 a(i), break; end;
1
end,i ans =
10946 i =
21
7.2.4 switch-case结构
【例7.2-5】学生的成绩管理,用来演示switch结构的应用。
clear;
for i=1:10;a{i}=89+i;b{i}=79+i;c{i}=69+i;d{i}=59+i;end;c=[d,c]; Name={' Jack','Marry','Peter',' Rose',' Tom'}; Mark={72,83,56,94,100};Rank=cell(1,5);
S=struct('Name',Name,'Marks',Mark,'Rank',Rank); for i=1:5
switch S(i).Marks
case 100 S(i).Rank='满分'; case a S(i).Rank=' 优秀'; case b S(i).Rank=' 良好'; case c S(i).Rank=' 及格'; otherwise S(i).Rank='不及格'; end end
disp(['学生姓名 ',' 得分 ',' 等级']);disp(' ') for i=1:5;
disp([S(i).Name,blanks(6),num2str(S(i).Marks),blanks(6),S(i).Rank]); end;
学生姓名 得分 等级
Jack 72 及格 Marry 83 良好 Peter 56 不及格 Rose 94 优秀 Tom 100 满分
7.2.5 try-catch结构
【例7.2-6】try-catch结构应用实例。
clear,N=4;A=magic(3); try
A_N=A(N,:), catch
A_end=A(end,:), end
lasterr A_end =
4 9 2 ans =
Index exceeds matrix dimensions.
7.2.6 控制程序流的其它常用指令
2
7.3
7.3.1 7.3.2 7.3.3 7.3.4
脚本文件和函数文件
M脚本文件 M函数文件 局部变量和全局变量 M文件的一般结构
【例7.3-1】M函数文件示例。 [circle.m]
function sa = circle(r,s)
%CIRCLE plot a circle of radii r in the line specified by s. % r 指定半径的数值 % s 指定线色的字符串 % sa 圆面积 %
% circle(r) 利用蓝实线画半径为 r 的圆周线.
% circle(r,s) 利用串 s 指定的线色画半径为 r 的圆周线. % sa=circle(r) 计算圆面积,并画半径为 r 的蓝色圆面. % sa=circle(r,s) 计算圆面积,并画半径为 r 的 s 色圆面.
% 编写于1999年4月7日,修改于1999年8月27日。 if nargin>2
error('输入宗量太多。'); end;
if nargin==1 s='b'; end; clf;
t=0:pi/100:2*pi; x=r*exp(i*t); if nargout==0 plot(x,s); else
sa=pi*r*r;
fill(real(x),imag(x),s) end
axis('square')
7.3.5 一 二
P码文件 语法分析过程和伪代码 P码文件的预生成
3
三 7.3.6
内存中P码文件的列表和清除
MATLAB的搜索过程
7.4
7.4.1 7.4.2 一
变量的检测传递和限权使用函数
输入输出宗量检测指令 跨空间变量传递 跨空间计算串表达式的值
【例7.4-1】evalin运行机理与eval的异同。 (1)编写M函数文件 [evalinzzy.m]
function y1=evalinzzy(a,s) t=(0:a)/a*2*pi;
y1=subevalinzzy(4,s);
%------------ subfunction ------------- function y2=subevalinzzy(a,s) t=(0:a)/a*2*pi;ss='a*exp(i*t)'; switch s
case {'base','caller'} y2=evalin(s,ss); case 'self'
y2=eval(ss); end
(2)在Notebook或MATLAB指令窗中运行以下指令
clear,a=30;t=(0:a)/a*2*pi;sss={'base','caller','self'}; for k=1:3
y0=evalinzzy(8,sss{k}); subplot(1,3,k)
plot(real(y0),imag(y0),'r','LineWidth',3),axis square image end
420100-10-20-2002050-5-50520-2-4-4-2024图 7.4-1 利用不同工作空间中的变量值计算eval('a*exp(i*t)') 二 跨空间赋值
4
共分享92篇相关文档