一.matlab控制流
1.for循环结构:
for i=1:10;
x(i)=i;
end;
x
x =
1 2 3 4 5 6 7 8 9 10
2.while循环结构:
Fibonacci数组的元素满足Fibonacci 规则,现要求该数组中第一个大于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
3.if-else-end分支结构
cost=10;number=12;
if number>8
sums=number*0.95*cost;
end,sums
sums =
114.0000
用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;
end,i
ans =
10946
i =
21
4.switch-case结构:学生的成绩管理,用来演示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 满分
5.try-catch结构:对(3× 3)魔方阵的行进行援引,当“行下标”超出魔方阵的最大行数时,将改向对最后一行的援引,并显示“出错”警告。
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.
二.跨空间变量传递
1.跨空间计算串表达式的值:(A)编写绘制正多边形或圆的程序。(B)子函数与(母)函数的关系。(C)各种不同的工作空间。(D)evalin 运行机理与eval 的异同。
(1)
[exm070531_1.m]
function y1=exm070531_1(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)
clear,a=30;t=(0:a)/a*2*pi;sss={\'base\',\'caller\',\'self\'};
for k=1:3
y0=exm070531_1(8,sss{k});
subplot(1,3,k)
plot(real(y0),imag(y0),\'r\',\'LineWidth\',3),axis square image
end
2.跨空间赋值:assignin 运作机理示范。
(1)
[exm070532_1.m]
function y=exm070532_1(x)
y=sqrt(x);t=x^2;
assignin(\'base\',\'yy\',t)
(2)
clear;x=4;y=exm070532_1(x);
disp([blanks(5),\'x\',blanks(5),\'y\',blanks(4),\'yy\']),disp([x,y,yy])
x y yy
4 2 16
三.串演算函数
1.eval
【例7.6.1-1】计算“表达式”串,产生向量值。
clear,t=pi;cem=\'[t/2,t*2,sin(t)]\';y=eval(cem)
y =
1.5708 6.2832 0.0000
【例 7.6.1-2】计算“语句”串,创建变量。
clear,t=pi;eval(\'theta=t/2,y=sin(theta)\');who
theta =
1.5708
y =
1
Your variables are:
t theta y
【例 7.6.1-3】计算“替代”串。
A=ones(2,1);B=ones(1,3);c=eval(\'B*A\',\'A*B\'),errmessage=lasterr
c =
1 1 1
1 1 1
errmessage =
Error using ==> *
Inner matrix dimensions must agree.
【例 7.6.1-4】计算“合成”串。
CEM={\'cos\',\'sin\',\'tan\'};
for k=1:3
theta=pi*k/12;
y(1,k)=eval([CEM{1},\'(\',num2str(theta),\')\']);
end
y
y =
0.9659 0.8660 0.7071
2.feval
【例7.6.2-1】feval 和eval 运行区别之一:feval 的FN 绝对不能是表达式。
x=pi/4;Ve=eval(\'1+sin(x)\')
Ve =
1.7071
Vf=feval(\'1+sin(x)\',x)
??? Error using ==> feval
Invalid function name \'1+sin(x)\'.
【例 7.6.2-2】feval 和eval 调用区别:feval 的FN 只接受函数名。本例两种方法以后者为好。
randn(\'seed\',1);A=rand(2,2);
[ue,de,ve]=eval(\'svd(A)\');
disp(\'Results by eval\');disp([ue,de,ve]);disp(blanks(1))
[uf,df,vf]=feval(\'svd\',A);
disp(\'Results by feval\');disp([uf,df,vf])
Results by eval
-0.9193 -0.3936 1.2212 0 -0.7897 -0.6135
-0.3936 0.9193 0 0.2633 -0.6135 0.7897
Results by feval
-0.9193 -0.3936 1.2212 0 -0.7897 -0.6135
-0.3936 0.9193 0 0.2633 -0.6135 0.7897
3.内联函数
【例 7.6.3.3-1】演示:内联函数的第一种创建格式;使内联函数适于“数组运算”。
clear,F1=inline(\'sin(rho)/rho\')
F1 =
Inline function:
F1(rho) = sin(rho)/rho
f1=F1(2)
f1 =
0.4546
FF1=vectorize(F1)
xx=[0.5,1,1.5,2];ff1=FF1(xx)
FF1 =
Inline function:
FF1(rho) = sin(rho)./rho
ff1 =
0.9589 0.8415 0.6650 0.4546
【例 7.6.3.3-2】演示:第一种内联函数创建格式的缺陷;含向量的多宗量输入的赋值。
G1=inline(\'a*exp(x(1))*cos(x(2))\'),G1(2,[-1,pi/3])
G1 =
Inline function:
G1(a) = a*exp(x(1))*cos(x(2))
??? Error using ==> inline/subsref
Too many inputs to inline function.
G2=inline(\'a*exp(x(1))*cos(x(2))\',\'a\',\'x\'),G2(2,[-1,pi/3])
G2 =
Inline function:
G2(a,x) = a*exp(x(1))*cos(x(2))
ans =
0.3679
【例 7.6.3.3-3】演示:产生向量输入、向量输出的内联函数;这种向量函数的调用方法。
Y2=inline(\'[x(1)^2;3*x(1)*sin(x(2))]\')
argnames(Y2)
Y2 =
Inline function:
Y2(x) = [x(1)^2;3*x(1)*sin(x(2))]
ans =
\'x\'
x=[4,pi/6];
y2=Y2(x)
y2 =
16.0000
6.0000
【例 7.6.3.3-4】演示:最简练格式创建内联函数;内联函数可被feval 指令调用。
Z2=inline(\'P1*x*sin(x^2+P2)\',2)
Z2 =
Inline function:
Z2(x,P1,P2) = P1*x*sin(x^2+P2)
z2=Z2(2,2,3)
fz2=feval(Z2,2,2,3)
z2 =
2.6279
fz2 =
2.6279
请发表评论