matlab(4)

图片 1

MATLAB 的语句流程与控制

各种允许的比较关系
>, >=, <,
<=, ==,~=, find(), all(), any()

  作为一种常用的编程语言,MATLAB
支持各种流程控制结构,如循环结构、条件转移结构、客观结构等另外 MATLAB
还支持一种新的结构 — 试探结构。

 

循环语句有两种结构: for … end 结构和 while … end 结构。
这两种语句结构不完全相同,各有各的特色。for … end
语句通常的调用格式为:

例:>>
A=[1,2,3;4,5,6;7,8,0]
A =
1 2 3
4 5 6
7 8 0
>>
find(A>=5), %大于或等于5元素的下标
ans =
3 5 6 8

for 循环变量=s1:s3:s2
    循环体语句组
end

 

注意,这里的循环语句是以 end 结尾的,这和 C 语言的结构不完全一致。 

>> syms s;

〖例〗 如果用户想由 MATLAB 求出 1+2+…+100 的值,可以作下列的循环:
>> mysum=0; for i=1:1:100,mysum=mysum+i; end; mysum
mysum =
5050

>>
P=(s+3)^2*(s^2+3*s+2)*(s^3+12*s^2+48*s+64)
P =
(s+3)^2*(s^2+3*s+2)*(s^3+12*s^2+48*s+64)

在上面的式子中,可以看到 for 循环语句中 s3 的值为 1。在 MATLAB
实际编程中,如果 s3 的值为 1,
则可以在该语句中省略,故该语句可以简化成 for i=1:100。

>> simple(P) %
一系列化简尝试,得出计算机认为的最简形式
ans =

在实际编程中,在 MATLAB
下采用循环语句会降低其执行速度,所以前面的程序可以由下面的命令来代替:
i=1:100; mysum=sum(i)。在这一语句中,首先生成了一个向量 i,
然后用内部函数 sum() 求出 i
向量的各个元素之和,或更简单地,该语句还可以写成 sum(1:100)。如果前面的
100 改成 10000,
再运行这一程序,则可以明显地看出,后一种方法编写的程序比前一种方法快得多。

(s+3)^2*(s+2)*(s+1)*(s+4)^3

MATLAB 并不要求循环点等间距,假设 V 为任意一个向量,则可以用 for i=V
来表示循环。

 

同样的问题在 while 循环结构下可以表示为

MATLAB 实现:
s1=simple(s)
从各种方法中自动选择最简格式 [s1,how]=simple(s)
化简并返回实际采用的化简方法

mysum = 0; i=1; while (i<=100), mysum=mysum+i; i=i+1; end

其中,s为原始表达式,s1为化简后表达式,how为采用的化简方法。
其它常用化简函数(信息与格式可用
help命令得出)
collect( )
合并同类项
expand( )
展开多项式
factor( )
因式分解
numden( )
提取多项式的分子和分母
sincos( )
三角函数的化简

条件转移语句:和 C 语言相象

图片 1

if 条件式1
   条件块语句组1
elseif 条件式2
   条件块语句组2

else
   条件块语句组n+1 
end

Q =
s^7 + 21*s^6 + 185*s^5 + 883*s^4 + 2454*s^3 + 3944*s^2 + 3360*s + 1152
>> syms s1
>> subs(Q,s,s1)
ans =
s1^7 + 21*s1^6 + 185*s1^5 + 883*s1^4 + 2454*s1^3 + 3944*s1^2 + 3360*s1 + 1152

开关结构:

gcd(m,n) lcm(m,n)
factor(n):质因子分解

MATLAB 从 5.0 版开始提供了开关语句结构,其基本语句结构为:

isprime:判断质数

switch 开关表达式
case 表达式1 
   语句段1 
case {表达式2,表达式3,…, 表达式m}
   语句段2

otherwise 
   语句段n 
end

 

MATLAB 开关语句与 C 有区别:

例:1-100间质数
>> A=1:10;
isprime(A)
%若向量A中某个整数值为质数,则相应位置为1,其他为零。
ans =
0 1 1 0 1 0 1 0 0
0
>> A=1:100;
B=A(isprime(A))
B =
Columns 1 through 16

  • 当开关表达式的值等于表达式 1 时,将执行语句段 1,执行完语句段 1
    后将转出开关体,无需像 C 语言那样在下一个 case 语句前加 break
    语句,所以本结构在这点上和 C 语言是不同的。
  • 当需要在开关表达式满足若干个表达式之一时执行某一程序段,则应该把这样的一些表达式用大括号括起来,中间用逗号分隔。事实上,这样的结构是
    MATLAB 语言定义的单元结构, 其具体内容将在后面叙述。
  • 当前面枚举的各个表达式均不满足时,则将执行 otherwise
    语句后面的语句段,此语句等价于 C 语言中的 default 语句。
  • 在 case
    语句引导的各个表达式中,不要用重复的表达式,否则列在后面的开关通路将永远也不能执行。
  • 程序的执行结果和各个 case 语句的次序是无关的。

2 3 5 7 11 13 17 19
23 29 31 37 41 43 47 53
Columns 17 through 25

试探结构:

59 61 67 71 73 79 83
89 97

MATLAB 从 5.2 版本开始提供了一种新的试探式语句结构,其一般的形式为:

 

try
   语句段1
catch
   语句段2
end

switch语句

本语句结构首先试探性地执行语句段
1,如果在此段语句执行过程中出现错误,则将错误信息赋给保留的 lasterr
变量,并放弃这段语句,转而执行语句段 2 中的语句。这种新的语句结构是 C
等语言中所没有的。

和 C
语言的区别
当开关表达式的值等于某表达式,执行该语句后结束该结构,不用
break
当需要在开关表达式满足若干个表达式之一时执行某一程序段,则用单元形式
(用大括号把这些表达式括起来,用逗号分隔)
otherwise
语句,不是C语言中的 default(但与之等价)
程序的执行结果和各个case顺序无关
case
语句中条件不能重复,否则列在后面的条件将不能执行

发表评论

电子邮件地址不会被公开。 必填项已用*标注