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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 haidaowang 于 2019-11-14 10:35 编辑 ) u/ r5 _% f2 `# _3 \8 `. a/ x
, |" B* l: t+ N, I: [, B

  u. p' d+ {) V0 y8 i1 ]判断常用于数学中的分段问题,更为复杂的问题则需要流程控制。本篇介绍matlab中的相关语法,这些语法并不难,但却很容易混淆,一方面是和其他语言,例如C语言混淆;另一方面是和matlab自身的其他语句,例如赋值混淆。
. X1 c! y8 t, |( l/ T
7 q4 d- B# j- X$ _* l2 y1.逻辑变量

: q3 b, V3 g! x8 `2 n5 b1.1逻辑变量的赋值

* c; M* W2 R& |3 k6 N4 v
; h( W& j6 h, A    有些语言中,逻辑变量是一种专门的变量类型,其值为true或者false,matlab中也有这个类型,但其值为1或者0。赋值方式是“变量名=表达式”,变量名的命名规则与数值变量一样,表达式是一种判断,比如数值大小的判断,或者高级函数的判断。例如输入) [4 J8 H! r. v' U, a' f) ?- ]
3 V' l3 M7 _1 X$ r
a=1>2
: K4 S3 @* Z# `1 j) g2 e
$ m- P$ C9 N: e! X/ i就定义一个逻辑变量a,其值是0,表示false,在workspace里可以看见a的类型是logical。- t0 Y. y' m# D4 M( x
4 l! a8 F$ W' A3 _4 {; @" o
; K7 p4 U# j; ~) S+ n2 t0 E5 w; E, h) Q

) b. t+ ?3 G8 A+ Q6 F; a' X3 @1 t1 _. Q" ^2 n
    对初学者,可以认为数值大小的判断,是指两个1*1维的数值变量的比较。数值大小比较的方法有:>大于;<小于;>=大于等于;<=小于等于;==等于;~=不等于6种。因为数值计算有舍入误差,所以等于这个判断,有时需要用
1 k- J; u& j3 h$ t( m3 E6 _! r/ G4 Z( M8 n7 S; F
abs(x1-x2)<eps
9 o% x; l1 a8 v5 c
8 t' b( J! v2 q& y3 u这样的不等式来代替,其中eps是matlab中最小的非零数值,相当于舍入误差的标准。) v4 N+ B3 ?- X' V' n

" t4 y. ]  ~' Z1 d+ ~& _+ W# U8 Z
    高级函数的判断,是指系统自带的一些函数,例如
& H' c8 L& m8 D4 G+ E! ~4 G
! j/ {8 G: U3 Z9 ~* n4 }2 _; Ta=isprime(x)
* i  E' D1 M, T* W7 I( m, `9 c% H+ o0 [9 R8 H
用来判断x是否为质数,1 G3 s. M8 i$ i- m2 }  }0 S
# @- P* i1 Y  K8 O: g
a=exist(x), r$ S5 r& h) g: _8 T6 v
  V7 C5 L# O4 Q/ Z# V+ Q
用来判断是否存在变量、函数或者文件。: p7 _6 h& L1 p* w: z

& z7 r8 _/ A7 ^$ g- _  R+ Q1.2逻辑变量的逻辑运算

, M# z" @3 U, ^  d* L
) ?! r7 n+ y+ \& b0 N  U1 G逻辑变量的取值只有0或者1,他们之间可以进行逻辑运算,运算符有:&&与;||或;~非。这里需要注意:) X4 K6 y4 B. N# M8 ?& k8 G
1)~单独使用表示非运算,要区别于不等于~=的连用
/ M( J' I. q: ]. L4 S8 y2)如果是高级函数的判断配合非运算,也可以实现判断,例如
( W  }1 ^8 u0 I( Q) i0 B& r0 l
( Z8 X8 k5 p) D. \
  • a=~isprime(x)5 a) H3 g9 D- D

- t, R5 S/ d2 g6 Q1 s- ^& h
- @8 N$ s8 x5 x! l* p4 D就相当于判断x是否为合数
/ I! d; x* s' C* {
) r! a! j2 {# ~1 Y8 n: Z' E3 x1.3逻辑变量的数值运算
% I/ O/ Q5 B% ^! q0 I' G- T3 D* z9 }

% T8 j6 N2 P0 M    matlab中逻辑变量可以参与数值运算,参与时,会被数值0和1代替。例如
# C$ s6 y- v8 F& C' G: M7 Q1 s1 A% k0 h7 Q: G
a=1>2, y' L! D; U% H" [
: N' m! z+ M! c! b) ~$ o" K5 G
生成一个逻辑变量a,则
2 j5 X+ i* l4 a/ I
7 q3 q+ ^! `4 h- _# @$ ~% Q) ab=a+1
" E4 ^( I0 q* x7 o5 _/ F
6 x: }6 n- x# `, d5 G时,matlab会判断正在进行数值运算,然后将逻辑变量a转化成数值变量,由于a在逻辑变量时表示false,所以转化时,a相当于数值变量0,因此会得到数值变量b=0+1=1。8 b. C2 n. S& @
/ f# C3 h9 F: S9 M. m+ ?
2.流程控制
1 q, q2 Q+ H- z
) h  y+ T  E4 q8 ?) ]) E; @
    matlab的流程控制和C语言类似,if和switch作为判断依据,相当于流程图的菱形框,for和while作为循环,相当于流程图的反向箭头。
( R" b+ x- @- `8 b/ ?
# m9 [1 d( N, a1 S
2.1if判断
  ~1 ]/ e9 Q9 R$ {, J' z( v
, d! n0 h( K1 z3 o+ k
    语法是:0 h7 d1 l& W. q) a0 L
; x; S# j3 k) n5 B
    1.if 逻辑变量1* m. r! H  L7 L4 e
           1.执行语句1
( T- V3 w7 _! N0 S                  1.elseif 逻辑变量2" F% a: y3 L# ~! D( t2 k6 d( z7 y
                         1.执行语句2; E6 l" h( K. ~, T. `
                                  1.else
4 R1 V% G6 x! A                                         1.执行语句3
* A1 f0 q2 p# M/ B6 O                                                 1.end
! R( B2 [2 K; C/ M/ T4 n

+ o* J" Y# H( X( K4 {" F其含义与C语言中一致,是顺序判断,即逐个if或者elseif进行判断,若逻辑变量为1,则执行语句,若为0则进行下一个判断。其中逻辑变量经常用多个逻辑变量的逻辑运算结果来代替,例如我们经常看到的是
; |2 ^$ _! Q& |" g) g1 e
; Z, q6 _7 A- |3 f% V/ e
  • if x>1 && y>1
    - t7 h$ U) K( n

7 y7 D# p2 P" o" l0 ]5 v! p# S
. O. r  G: l) V6 A而不是先赋值再判断的2 [# m& n; ~8 C& l5 Q

' z- T/ {3 I3 O5 ?" E) K9 |
  • a=(x>1) && (y>1)  {  a. x. y7 a) {
         1.if a8 |9 \% g0 k1 p4 A& M
. I0 j# i8 u, ~

2 ?  A/ Z8 ]! x' Y* B5 x) r! b. R
7 j. X1 d9 O, U( M' J5 Z2 s% d' J! p其实这两种方法是等效的。有时候为了书写和注释,也会先定义一个逻辑变量flag,然后再if flag。" |% W/ \4 Y/ x" W9 s; s/ W9 T
! U: P5 B6 v" _2 r9 N# `9 c% Q
2.2switch判断
- E" R4 s2 B3 e

  Z; {9 G9 r  Q    switch的语法是:
; f5 h7 P, N/ s# P1 d    1.switch 数值变量1  U; q) N- u6 Z# L/ @5 W
              1.case 数值1; U5 G  L& z4 m0 B, Q+ ?/ B
                    1.    执行语句1
# A- b) }' h) _$ l8 w                            1.case 数值2
2 ]& @1 D( a8 U8 H                                   1.    执行语句2" e) Y+ c$ E9 U3 h, A
                                          1.otherwise4 }, G* Q' R2 x
                                                1.    执行语句3" ~$ i( v# S2 e* N2 [3 N  ?
                                                       1.end
3 q, w% J9 X8 U. H: u
5 L! q  {6 d" |
switch与if最大的不同是,switch只进行一次判断,即根据数值变量1的值来决定执行哪一个case,而不像if会判断多个elseif。需要强调的是,只有当数值变量1==数值1时,才会执行语句1,而之前说过,==这个判断是有舍入误差的,因此switch一般用于数值变量1只取整数时,比如sfun的判断。对初学者而言,也可以先无视switch。
5 k1 `, q+ g7 J- _9 e8 x  r: s1 X  K% |( W# _
2.3for循环
, W1 T& Q: ~6 M7 b+ p8 [) g7 ~

+ {) q  |* A. I; w    for循环的语法是:
1 E5 m" ^% ^; v" @6 f. D" z+ m    1.for 数值变量=向量2 ?0 S! y; ^  {$ _9 `
          1.    执行语句
2 `; s5 ?5 P5 G  V9 P5 b* B/ t                 1.end

1 J# W* `" b# |: E2 ~
9 E" B. `( O* j% H其含义是,数值变量会取向量中的每一个值,然后执行语句,在执行语句中,数值变量是一个1*1的矩阵。matlab中程序换行有两种方法,第一种方法,只能从第一行换到第二行,具体操作如下,首先在第一行中写完命令之后按下空格键,然后再按下数字键盘上的小数点键,小数点数目为3,之后按下enter键就可以实现换行。 ...+Enter;第二种方法,直接按住Shift+Enter键可以直接实现换行0 g# t9 X3 K2 r1 Y* v1 D
3 v  `/ Z. l6 M
for a=[0 1 3]7 t7 _" v+ b( ]3 Y: ~* G, U. @: j1 S
& ^& h' ^  {6 l! f, D
则会让a=0,执行语句,然后a=1,执行语句,最后a=3,执行语句。这里容易和赋值语句混淆,因为a=[0 1 3]是一个数值变量赋值,赋值后a是个向量,但加上了for后,a是1*1矩阵。另外,在数值变量赋值那段,我们说过有一种常用的赋值方法是"a=初始值:步长:终值",其结果是把a赋值成一个向量,因此这也广泛用于for语句中, O6 W/ l( x" A. c7 ^8 F3 t1 n/ u

& ^% M, Q# G: A0 r

6 q0 O5 y! R5 I  C3 t8 W. G
  z' v: ?- C  ?
  • for a=初始值:步长:终值/ T" w" D  j6 @) b. E, h6 A* j) R
) ~9 t# a# o1 c) c* J" }
9 [+ `9 z0 f2 g+ ?0 P
则在执行语句中,a是一个遍历初值到终值的1*1矩阵。
( q$ K. B0 K7 F$ e1 r7 ^$ A1 S; O: d
2.4while循环

# I5 Q9 S  l# x/ H% c" x7 w2 B1 m$ {. h8 b  p/ P& z7 e+ [
    while语句的语法是:5 K  U. E4 J3 h8 a/ c0 G
    1.while 逻辑变量' Q7 C" b/ Z: f+ n6 t( V- _  n
           1.    执行语句' B  ]5 N* ^: U( {: _
                   1.end
5 d# C0 s2 F% I* W* ?. `
& [2 Q$ H% D8 }$ M3 v8 M9 ^3 n/ r

2 v5 L3 a8 y7 p& ~; P. _( S; G4 s0 f2 Z
其含义是,当逻辑变量为1时,执行语句,直到逻辑变量为0,因此while的执行语句中,一定有改变逻辑变量的部分,否则就是死循环。比如写了while a<10,就一定会在执行语句中有类似a=a+1这样的赋值语句,使得若干次循环后,逻辑变量为0。总体而言,while并不如for稳定,所以初学者也可以无视while。

2 t3 o( F2 j: Y$ p1 P6 ~0 v: x
& Y) |, \7 R% l- E
7 N% ^9 o1 C- M) Q" {- K7 ~$ `

: o8 U5 y' H/ W9 O
9 V; q" F5 ~9 k1 E& z. {

* n& @+ h4 w1 j/ `$ M, R$ B

6 n/ z+ r& P+ v8 N1 ]# t1 M' ~( O9 M. a( Z# z: s6 I

! G1 P1 c2 r7 h3 c1 Y
# N6 g! s; u' ]& J- d$ l4 O
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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