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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 haidaowang 于 2019-11-14 10:35 编辑
/ c& _& ]2 z! Z  }$ S
# i5 l, O7 F. Q! Z7 V  Z) K, ]$ x# d- s# k& ]
判断常用于数学中的分段问题,更为复杂的问题则需要流程控制。本篇介绍matlab中的相关语法,这些语法并不难,但却很容易混淆,一方面是和其他语言,例如C语言混淆;另一方面是和matlab自身的其他语句,例如赋值混淆。- m7 A8 i2 s" Z) M8 L5 U1 t, [4 E
' s) t* W0 K% ~8 n3 ]& T6 N9 N
1.逻辑变量
  S. l' Q3 {2 @- i
1.1逻辑变量的赋值

4 u. ^8 o3 a/ N; ^1 Q
3 }5 N5 o! k- R$ K8 l; ]4 a2 a    有些语言中,逻辑变量是一种专门的变量类型,其值为true或者false,matlab中也有这个类型,但其值为1或者0。赋值方式是“变量名=表达式”,变量名的命名规则与数值变量一样,表达式是一种判断,比如数值大小的判断,或者高级函数的判断。例如输入7 B. |4 r( d/ ^: t, @" u/ C0 _

5 \& _: E# W" B- s: ~7 J3 ba=1>2/ {$ [- E( v7 y
0 {4 [# y3 y) {0 @
就定义一个逻辑变量a,其值是0,表示false,在workspace里可以看见a的类型是logical。( C& {. Q  f0 d7 u

7 X4 T* r( B. b/ c7 T( T$ q% M
5 {& _6 J/ A  F8 ?' L
8 H% }& o  s/ r. X/ a5 d

& o0 b+ ?/ T0 R: t1 Y    对初学者,可以认为数值大小的判断,是指两个1*1维的数值变量的比较。数值大小比较的方法有:>大于;<小于;>=大于等于;<=小于等于;==等于;~=不等于6种。因为数值计算有舍入误差,所以等于这个判断,有时需要用( ]8 c% L1 `  S. e

1 |. S7 F9 [4 `% {  h8 @abs(x1-x2)<eps
! V' F0 I" F3 s; ?3 D' V" c* x# X% f1 a4 j4 n2 m
这样的不等式来代替,其中eps是matlab中最小的非零数值,相当于舍入误差的标准。
, U# l. t7 W: M, O: e2 Z* {
. H  Z; e( W; b3 o( S; q+ C# t
; c) x6 d8 U2 d+ i' u$ h* H    高级函数的判断,是指系统自带的一些函数,例如
- v  |+ G# C/ I5 e: \4 F
0 x* t% k" A( m& L& p3 ~a=isprime(x)  N+ ^3 I4 c) ~9 A
5 H) D* V, u  k! A. F/ Z7 n9 N
用来判断x是否为质数,
8 j* @4 J4 k. f9 i0 c9 t5 _+ L) x( P
a=exist(x)  I: M6 V* ?+ u4 Q
8 M; i# ^, r: O* E3 n/ k( }/ F
用来判断是否存在变量、函数或者文件。
. [9 G* M  ^# ?- e6 j' H( L9 G- c: p! x: C: k0 c6 j0 D" L2 ^
1.2逻辑变量的逻辑运算
3 }# f7 l8 X- o; `+ t5 m% V

  _3 m5 x0 V1 j" \0 V8 O% l逻辑变量的取值只有0或者1,他们之间可以进行逻辑运算,运算符有:&&与;||或;~非。这里需要注意:( l6 ^  R$ f. }6 X/ L) V
1)~单独使用表示非运算,要区别于不等于~=的连用
. V) _. l. L  z4 m2)如果是高级函数的判断配合非运算,也可以实现判断,例如$ v8 c- h5 d# n* c" @$ t6 S
8 f& N, \/ r1 f, _* [4 ~5 R. V
  • a=~isprime(x)
    $ f# Z! Y+ I- m! t- e) ^4 e
7 S- D- Z! b9 j! b; V
2 T9 L9 n- M+ r$ ^. r- f- d
就相当于判断x是否为合数
% M+ G( q& V- @
9 _8 m, Q, w; c  T1.3逻辑变量的数值运算
/ @; g- k5 G  U
& j5 b) O3 B  X8 V
    matlab中逻辑变量可以参与数值运算,参与时,会被数值0和1代替。例如
3 i9 ?$ W- m" \- |3 X% W( D+ G
: {( k- t+ V5 v1 ?# Fa=1>23 L7 |. s6 G6 j! r6 @

! E7 N( m+ z* V6 D1 }2 A  T0 j( a生成一个逻辑变量a,则
! d! k# e" p  f  o3 J  K) _
2 g; O% u3 @% Mb=a+1
; K9 T; H2 e1 X0 C# n
" |( Q0 E9 |) q" _, I时,matlab会判断正在进行数值运算,然后将逻辑变量a转化成数值变量,由于a在逻辑变量时表示false,所以转化时,a相当于数值变量0,因此会得到数值变量b=0+1=1。
$ j. a. @/ f& e- y$ b( J$ z2 ~' r
0 S. S9 c  ~1 b2 b9 _* f# w; ]2.流程控制
9 y5 v( C% X5 x- L3 ?, I- l
/ Z1 m, K; E' x% U* h$ Y( O3 N
    matlab的流程控制和C语言类似,if和switch作为判断依据,相当于流程图的菱形框,for和while作为循环,相当于流程图的反向箭头。

+ O& R8 E+ T3 b  X  d( f% F6 D9 s" k
2.1if判断

6 z: s' p5 e6 {2 Q1 B
+ m% ~+ `& n  c# h( x9 x    语法是:! p3 [' Y) E0 k: r/ W; }3 G

# o3 v2 ^2 \/ G    1.if 逻辑变量1
1 S- y- p. [. x0 H# Z2 q           1.执行语句1' i, N& M, y" I3 t4 m* i
                  1.elseif 逻辑变量2, }0 n9 w3 `: e0 @0 U0 T
                         1.执行语句2/ y3 c# r7 o+ v8 u: j# H
                                  1.else9 `6 l" w6 b# A0 C- R& b" K
                                         1.执行语句3  C4 p8 y5 ?% \  [* O" u
                                                 1.end
5 F" h; m5 Q, h" x9 }6 {

" ~% X" k/ ^, U: ?6 n- M7 M其含义与C语言中一致,是顺序判断,即逐个if或者elseif进行判断,若逻辑变量为1,则执行语句,若为0则进行下一个判断。其中逻辑变量经常用多个逻辑变量的逻辑运算结果来代替,例如我们经常看到的是
; m+ \+ Z  J3 h5 {6 J- x; Y; T! r- N6 B. x$ d% k: G$ c
  • if x>1 && y>1
      p) O6 d' q' ~' F7 v3 s2 f5 W
9 b! c  N# h  W) j- U7 k
, w( @4 M! d  `
而不是先赋值再判断的+ }0 H8 |* {* ?# `- S0 T2 w
0 B8 s& r1 e0 H. ?! I! E% w. H
  • a=(x>1) && (y>1)
    4 l/ S# L2 n$ x) i  f
         1.if a
4 @) E* Z' I7 I1 \3 `; J: N/ z, i3 p0 c+ S7 L
7 `8 R: \; n& S1 \3 P

" l& q9 l! }  r/ W  I其实这两种方法是等效的。有时候为了书写和注释,也会先定义一个逻辑变量flag,然后再if flag。
& T4 n& M$ _0 ?5 c
( @% q1 n( d% e% o2.2switch判断

) g) H& @% d. ^! P0 Q9 |$ ^) G7 e, G0 c3 r& f
    switch的语法是:
: J* Z2 y3 `, C" O    1.switch 数值变量1
4 g- A6 ~" |5 H4 I: `9 _              1.case 数值1
+ i9 W" }2 @/ U+ P) W' n9 M                    1.    执行语句1$ ?" I1 Y- o2 Q  M. m, O: w
                            1.case 数值2( \" `1 |' n+ ]& O( O8 m$ i/ g
                                   1.    执行语句2
5 c, I" j2 P. d, _                                          1.otherwise
% O3 z) [" u- z, }+ P0 C                                                1.    执行语句3
* `2 u+ i* i- Y                                                       1.end
, e* ]6 n$ b/ E' a  f( E

" t; a4 a4 g; aswitch与if最大的不同是,switch只进行一次判断,即根据数值变量1的值来决定执行哪一个case,而不像if会判断多个elseif。需要强调的是,只有当数值变量1==数值1时,才会执行语句1,而之前说过,==这个判断是有舍入误差的,因此switch一般用于数值变量1只取整数时,比如sfun的判断。对初学者而言,也可以先无视switch。0 W& F, z8 P: \  k- M+ h" d8 h1 T
0 ?9 G1 s) P' J& m( y! L9 M
2.3for循环

, F7 I) E- {" P/ W
" [  o- z8 l' T9 R: o    for循环的语法是:
6 S6 l; G7 I) b4 e    1.for 数值变量=向量: W: n, Q1 W( C! n* g
          1.    执行语句
6 [  M( F$ M# C" d$ [% C7 z' ]                 1.end
/ U, j- A$ n; N3 Y6 C9 \1 p

( q2 p5 P) i- v; q其含义是,数值变量会取向量中的每一个值,然后执行语句,在执行语句中,数值变量是一个1*1的矩阵。matlab中程序换行有两种方法,第一种方法,只能从第一行换到第二行,具体操作如下,首先在第一行中写完命令之后按下空格键,然后再按下数字键盘上的小数点键,小数点数目为3,之后按下enter键就可以实现换行。 ...+Enter;第二种方法,直接按住Shift+Enter键可以直接实现换行
( }1 a1 i5 [: `! i5 U, G) v
$ F, p+ U! U4 J6 g6 [for a=[0 1 3]
7 d% |! b. Z/ d6 O2 [
, V# {8 y9 ?) p% W* C6 g# t则会让a=0,执行语句,然后a=1,执行语句,最后a=3,执行语句。这里容易和赋值语句混淆,因为a=[0 1 3]是一个数值变量赋值,赋值后a是个向量,但加上了for后,a是1*1矩阵。另外,在数值变量赋值那段,我们说过有一种常用的赋值方法是"a=初始值:步长:终值",其结果是把a赋值成一个向量,因此这也广泛用于for语句中
0 C9 O% l8 L* u( c9 r. b+ T
7 f1 P0 n1 o# d" l* A0 X
+ G% u" G5 @; B- c. l  e. @9 s/ ]
4 E- k1 k/ H2 O2 Y2 ?7 w: |
  • for a=初始值:步长:终值+ n, w. f; S3 Y& S- S
& V, W+ u. v' z; U8 m2 E" W

' L* l2 V" m8 y$ X" n, e8 ]则在执行语句中,a是一个遍历初值到终值的1*1矩阵。- ]8 p5 H! t2 Z4 `& Z0 V

; L3 Z9 }, o. H# A/ s) `% Q& [2.4while循环
: F* x, V1 y  G' j) c% k

2 B& P$ g# r& u8 y( W& ]    while语句的语法是:
" r! v' ^$ I3 s9 V) D  ^) u! W    1.while 逻辑变量
) @3 `8 B3 O: k# R, w0 A1 w0 J           1.    执行语句
9 @& N6 `. \0 }4 {! ]  b- L                   1.end
9 n& I" x8 A" p: d+ {3 F) ~# z: ^
/ r" W: i: x9 O$ |2 z1 m; ~: N! ?

+ u1 G2 {8 ~; z; {7 u
; H- L; }, S% J) u/ l+ T其含义是,当逻辑变量为1时,执行语句,直到逻辑变量为0,因此while的执行语句中,一定有改变逻辑变量的部分,否则就是死循环。比如写了while a<10,就一定会在执行语句中有类似a=a+1这样的赋值语句,使得若干次循环后,逻辑变量为0。总体而言,while并不如for稳定,所以初学者也可以无视while。

! ]5 W+ H$ }( `( B) B  G. Q( y" F1 x) `" j. V

: Z: {/ U0 C3 _2 H& a2 b; P$ P
7 x4 o4 \/ H9 w& r& n+ E

: M8 H$ A8 t& S2 ~) |! ^

: a$ H1 m  n, a1 L" {3 E5 s8 B6 j) z; h, g; l1 @3 K

9 d/ D) K* `* Z1 e
, Y9 _& P/ ]4 P9 I0 D
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-23 17:03 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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