找回密码
 注册
关于网站域名变更的通知
查看: 593|回复: 1
打印 上一主题 下一主题

MATLAB基础教程(6)MATLAB中的判断与流程控制

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-11-14 10:33 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 haidaowang 于 2019-11-14 10:35 编辑
& Y5 n4 }  R2 r; t# f9 t
4 W/ U) X8 [! X; T
* I7 E. O; s0 R) x# `7 [判断常用于数学中的分段问题,更为复杂的问题则需要流程控制。本篇介绍matlab中的相关语法,这些语法并不难,但却很容易混淆,一方面是和其他语言,例如C语言混淆;另一方面是和matlab自身的其他语句,例如赋值混淆。
  p# z$ g9 [) G; L
7 {- ^* g9 @4 d1 f8 c# y1.逻辑变量

; D9 a5 l6 F& B+ J6 d- M# f3 q" R$ Y1.1逻辑变量的赋值
' u5 K3 c+ e+ e2 l" E

% w! g3 i' M0 ~/ F    有些语言中,逻辑变量是一种专门的变量类型,其值为true或者false,matlab中也有这个类型,但其值为1或者0。赋值方式是“变量名=表达式”,变量名的命名规则与数值变量一样,表达式是一种判断,比如数值大小的判断,或者高级函数的判断。例如输入
2 O8 y4 P7 K: U/ x' e# p
- O- W! }- p, x4 H8 |% G# Ua=1>26 o8 ?, y+ e1 `9 U" N8 S
- u4 @8 x3 P, t7 {8 M
就定义一个逻辑变量a,其值是0,表示false,在workspace里可以看见a的类型是logical。  Y: _1 w5 ~2 G/ k2 l
4 T; Z. r  M) v" Q* [& @
5 c) w% h/ x0 o9 j5 l, ]- E

: u1 S; y# ?( v% ?) [4 u# X1 q. g3 E0 k
    对初学者,可以认为数值大小的判断,是指两个1*1维的数值变量的比较。数值大小比较的方法有:>大于;<小于;>=大于等于;<=小于等于;==等于;~=不等于6种。因为数值计算有舍入误差,所以等于这个判断,有时需要用
( i3 m( B3 {% t- ~5 A5 {+ X& s# f' c6 V3 H4 e
abs(x1-x2)<eps( B& q9 E& k) d/ A
4 m4 g5 m1 }, @. ^9 Q- R& @
这样的不等式来代替,其中eps是matlab中最小的非零数值,相当于舍入误差的标准。
7 v: L  d% U1 ]+ b
8 m( T) r7 H& n4 _: K7 m7 v* U2 J! ~, F' b! x
    高级函数的判断,是指系统自带的一些函数,例如# l) O. }. U: H7 t
# k* w; I2 U1 N+ s9 T
a=isprime(x)
1 G: _8 }8 i% D6 H9 t( y% _( T- r/ O* b7 a' z  K  l! ^' K  C
用来判断x是否为质数,
" T) O( T5 Y! _, D7 y7 n, w  x; i. ]5 t% L
a=exist(x)
) H; ]) n$ q' ~/ o; B: B0 B- j" z) ?7 y
用来判断是否存在变量、函数或者文件。& b. P0 F" z' Y  S
- u4 n( e. L* N
1.2逻辑变量的逻辑运算
8 \' {  ^  ~* p9 k% b+ l

3 c) z1 T8 c; r. V逻辑变量的取值只有0或者1,他们之间可以进行逻辑运算,运算符有:&&与;||或;~非。这里需要注意:- |' D9 @: V% E2 g! a% J. h. i' j9 k
1)~单独使用表示非运算,要区别于不等于~=的连用' @8 w; l% k. q9 ?- S( Z9 \
2)如果是高级函数的判断配合非运算,也可以实现判断,例如# o2 C4 _) Y: [8 |# k2 `

3 C9 t" O& A* o
  • a=~isprime(x)! ^) g8 n! w& Q9 n% ?
5 |  z" X! Q% I+ {0 `- m7 r

$ k7 I) U( s! l1 q* a4 S就相当于判断x是否为合数  b$ v" J/ k" a1 c. i' l! e) b. Y  V

3 d2 }5 }0 O$ Z& q1.3逻辑变量的数值运算
9 Z) [2 a+ _$ o; `

; d+ }8 [  M4 r% C! `; P1 |1 V$ {7 v4 s    matlab中逻辑变量可以参与数值运算,参与时,会被数值0和1代替。例如3 G) v. w0 ]" _" G

7 }( `8 |6 I; o4 z7 E% L$ J: wa=1>2! z6 v" v% r  `" ]  `# w

" p* [5 p+ D2 y: k; E+ }1 h( w生成一个逻辑变量a,则
) _8 R, n9 L0 w2 i  y! i- C. G" ~7 Q2 O
b=a+1
" j* n! k4 a' J2 ~% M2 H8 `% t3 v4 M- q3 Q; C
时,matlab会判断正在进行数值运算,然后将逻辑变量a转化成数值变量,由于a在逻辑变量时表示false,所以转化时,a相当于数值变量0,因此会得到数值变量b=0+1=1。
4 i, P7 S) B- n2 ~0 ?+ W- @" s# E& _8 K$ T: j
2.流程控制

  J& G- R6 H" E# [! m+ N9 q% ]6 B% N; `0 V
    matlab的流程控制和C语言类似,if和switch作为判断依据,相当于流程图的菱形框,for和while作为循环,相当于流程图的反向箭头。
  y0 A& a% A7 z( k6 O9 U9 j' @, @
0 `$ O$ u: U' I( z7 b0 l% m- `5 z
2.1if判断
' c( q* f, m. i& W: C; ?" V* N

5 l. E0 v6 @& {+ [6 g6 s, H    语法是:( C3 K* D0 y/ K! a8 H" s3 ]9 F
# L% B) d: P! `- T
    1.if 逻辑变量1
# R5 {- p$ S" ]1 a           1.执行语句1$ K% p9 }. Z* W, o( N( i5 }. D/ R
                  1.elseif 逻辑变量2! s* \' Z! z- E% p
                         1.执行语句2
; w4 C3 X) N- y' t- v                                  1.else
  y0 S& V, N/ r  _                                         1.执行语句3/ Q* Q7 ~  m- F7 k, S  |7 I* _' \
                                                 1.end
! A- A. |6 z! y* E; P$ V- y( |
* ~; k) {9 F/ o+ G0 q
其含义与C语言中一致,是顺序判断,即逐个if或者elseif进行判断,若逻辑变量为1,则执行语句,若为0则进行下一个判断。其中逻辑变量经常用多个逻辑变量的逻辑运算结果来代替,例如我们经常看到的是9 N8 d% o4 I9 X0 k+ S

8 k: u' L; w) O+ N* K
  • if x>1 && y>10 r, k5 O/ x+ `

7 s6 K6 ^5 q" z' f
. ?6 w- _" L0 n. M) _5 T' |8 W而不是先赋值再判断的/ x8 z+ A; }: U3 f5 @! n- X/ g* |7 u
' z& N* M, a3 Q5 M! c7 o
  • a=(x>1) && (y>1)6 P* X2 S, G6 H7 ]  H7 u
         1.if a
' F; z5 ~; j! M1 w, {0 V% \* G3 M" i, |

" i( f5 k; s6 f9 E
! n; S5 {# G0 D: q0 V, w其实这两种方法是等效的。有时候为了书写和注释,也会先定义一个逻辑变量flag,然后再if flag。
$ z6 t) f# S+ }* H& E# |9 Q/ T+ ~. M% E4 M0 @0 H& X
2.2switch判断
/ `4 d% R/ Z* t9 q6 E5 f- K5 \

/ q. P( `1 z2 E9 v9 a9 A) G9 _7 I    switch的语法是:5 x" B) C; P) E) T  S
    1.switch 数值变量1
& ~# \+ e* i6 |5 C; P% ?* s  I* s              1.case 数值1
- ^* A  B9 [) x7 T1 @                    1.    执行语句19 E* j4 F0 X. b: i
                            1.case 数值2: x7 t  a$ `$ w4 T9 r; ]3 ?7 A9 g
                                   1.    执行语句2
" I* ~: }6 y* O9 M  ]4 n" F                                          1.otherwise
2 K9 Z- I5 e) P                                                1.    执行语句3$ T+ G3 a, o7 ?, |& k) P
                                                       1.end

" @& u% s7 R! z* a. z" A) k1 ~: g5 l5 U
switch与if最大的不同是,switch只进行一次判断,即根据数值变量1的值来决定执行哪一个case,而不像if会判断多个elseif。需要强调的是,只有当数值变量1==数值1时,才会执行语句1,而之前说过,==这个判断是有舍入误差的,因此switch一般用于数值变量1只取整数时,比如sfun的判断。对初学者而言,也可以先无视switch。
2 [3 m% D: u! }" Y+ m5 s3 T9 b+ o6 v. r7 G6 M: p2 x& Y
2.3for循环

) X! S2 j+ z' T( [$ U5 C5 G8 t! o4 m) j7 V5 n# Y
    for循环的语法是:9 e( Y) [1 E: ?6 k+ l4 T
    1.for 数值变量=向量
# v- e3 Q& R* u$ ^$ R0 r( i          1.    执行语句
% p+ p9 P4 }) l6 F( M; [& f                 1.end

  F& ^- m8 [: X+ \1 W# p; X6 u4 x" v2 S
其含义是,数值变量会取向量中的每一个值,然后执行语句,在执行语句中,数值变量是一个1*1的矩阵。matlab中程序换行有两种方法,第一种方法,只能从第一行换到第二行,具体操作如下,首先在第一行中写完命令之后按下空格键,然后再按下数字键盘上的小数点键,小数点数目为3,之后按下enter键就可以实现换行。 ...+Enter;第二种方法,直接按住Shift+Enter键可以直接实现换行
, @! R. X8 L" `7 H  B* V: v& x2 L  a
for a=[0 1 3]+ g5 T+ K( A( M3 a
5 h! Y+ M; @% I
则会让a=0,执行语句,然后a=1,执行语句,最后a=3,执行语句。这里容易和赋值语句混淆,因为a=[0 1 3]是一个数值变量赋值,赋值后a是个向量,但加上了for后,a是1*1矩阵。另外,在数值变量赋值那段,我们说过有一种常用的赋值方法是"a=初始值:步长:终值",其结果是把a赋值成一个向量,因此这也广泛用于for语句中
: ~( D* t, Y' q" u  d0 \2 y) ?# s$ K, @3 n: N% b

4 n  W) t4 |. Z4 ?! o
' m/ M. P, J" p
  • for a=初始值:步长:终值
    / {5 n! g1 o: ^& ^* R/ W& G

* m4 v: `# L! }0 B* |
! U0 J, ~; O& \/ l( i1 |: v6 C; v则在执行语句中,a是一个遍历初值到终值的1*1矩阵。
5 `$ p2 e) s" e& i( x  L
- Q  H0 U, q9 j8 N9 M6 x# R; M2.4while循环
+ V8 q; ?3 _. x5 ^+ @4 V

, E3 l1 g& }, r3 c! r& l& i    while语句的语法是:
: ^0 S/ c) L/ J# V; t    1.while 逻辑变量
4 `9 ~! W" W+ P" j- R           1.    执行语句
0 d0 j6 M( w8 O3 F8 k. l% o8 o                   1.end
' }5 f1 G4 t4 t) A, D
; b; }6 G' A1 a" R7 z; c

3 F# p8 {/ a* J- ~# C0 K9 n3 B- W) B. |. w( o. J
其含义是,当逻辑变量为1时,执行语句,直到逻辑变量为0,因此while的执行语句中,一定有改变逻辑变量的部分,否则就是死循环。比如写了while a<10,就一定会在执行语句中有类似a=a+1这样的赋值语句,使得若干次循环后,逻辑变量为0。总体而言,while并不如for稳定,所以初学者也可以无视while。
# v) }! J+ M* b- b: f$ z2 Q

$ p# [1 R' J! }- `8 X
' e( J1 m: d" B. J9 M& E0 L/ N
4 q. @: B/ }) c+ r! X
3 i, `: n% Z7 F3 ^4 H- [; S

5 p# y( I) S+ }. a1 h& T
+ Y) r6 Z' l0 g: o

% @3 v$ k& R' S4 g: i$ ]" t0 e8 t

' R) r$ E! r. A% @# X" F* C2 v3 Z* C7 _: f, C0 c
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-4 23:37 , Processed in 0.125000 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表