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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 haidaowang 于 2019-11-14 10:35 编辑
! g% ]& ]! w8 k9 c- j! p8 F( t7 v1 Q- f/ n( C9 J
: u6 b0 O5 A8 M( I% F
判断常用于数学中的分段问题,更为复杂的问题则需要流程控制。本篇介绍matlab中的相关语法,这些语法并不难,但却很容易混淆,一方面是和其他语言,例如C语言混淆;另一方面是和matlab自身的其他语句,例如赋值混淆。: N4 k3 v: ]8 ?% {4 H

, i, q- f# P/ u9 b1.逻辑变量

. B! [4 h" S0 q3 P1.1逻辑变量的赋值

  k( M2 C, h4 G, x8 Q
' y7 i" O+ y! ^# K    有些语言中,逻辑变量是一种专门的变量类型,其值为true或者false,matlab中也有这个类型,但其值为1或者0。赋值方式是“变量名=表达式”,变量名的命名规则与数值变量一样,表达式是一种判断,比如数值大小的判断,或者高级函数的判断。例如输入
8 I0 a) S6 l' z' }
. b( v, J2 i9 y: g+ E5 ^a=1>2( M, G$ ?* r, y5 ]/ {$ m  v

8 k. c8 f' z6 _9 K8 n2 a& g就定义一个逻辑变量a,其值是0,表示false,在workspace里可以看见a的类型是logical。! G% t2 w. ~  _0 X4 J0 U4 }4 j

. m1 U& w# K; h1 w

: A8 d8 k; |$ A2 k7 O1 T
" [" k8 F% {# F2 F; {
3 y6 J& f5 g: D8 A    对初学者,可以认为数值大小的判断,是指两个1*1维的数值变量的比较。数值大小比较的方法有:>大于;<小于;>=大于等于;<=小于等于;==等于;~=不等于6种。因为数值计算有舍入误差,所以等于这个判断,有时需要用
  i+ [9 J7 _% [( o. x& s" ?0 ~' n
abs(x1-x2)<eps) O% j1 A8 q1 K0 D

# W) v' C+ L5 a' G这样的不等式来代替,其中eps是matlab中最小的非零数值,相当于舍入误差的标准。+ D2 S" e1 g5 ]: h; w

+ s" k8 @% @3 ^2 w) d6 ]/ H% l5 X  N0 ^6 N# b5 x
    高级函数的判断,是指系统自带的一些函数,例如
# c) Y; F" c5 t% l6 s9 `/ q& i* F
+ x! `- h+ F/ l% V2 X5 }! N9 O8 n$ ta=isprime(x)
( J9 f  i  k, p2 L0 I+ K4 k6 E& A  y! j! \4 N
用来判断x是否为质数,  u& U9 a, H( H: n$ m

% t6 K% [/ M$ H' A- |+ ka=exist(x)# [4 D; \. F) X, X

# A( q" m) ~( N) ^! O  I: ]用来判断是否存在变量、函数或者文件。
2 |/ N: Y& v+ ^) g! c& O0 X) m' F; o0 N6 J" I  c5 }- M: |
1.2逻辑变量的逻辑运算
2 g: C% M9 N0 N5 W: @. I
% e: v& C4 ^' T7 W" p
逻辑变量的取值只有0或者1,他们之间可以进行逻辑运算,运算符有:&&与;||或;~非。这里需要注意:
: j# ]. C# l# q; |4 W- H& I1)~单独使用表示非运算,要区别于不等于~=的连用
( R# f& P  T/ |  Z2)如果是高级函数的判断配合非运算,也可以实现判断,例如; Q* Y' g# X# Z5 d9 o' l. W
# L! f; e" \9 d$ `8 N+ U
  • a=~isprime(x)
    + `, H9 F. ]. u3 h0 i6 S" g
6 Z& D0 \9 y3 P' {1 f" b. K7 X

& {* J( w: z" V- `) D" P$ j就相当于判断x是否为合数  `5 z% O2 ^0 {
* r6 u' m  u; q* X* K
1.3逻辑变量的数值运算

3 T3 z" D" k: ?$ a" l, J0 Q! R7 Z8 A6 S/ o( |" |3 z
    matlab中逻辑变量可以参与数值运算,参与时,会被数值0和1代替。例如
' v1 _3 q) ]+ |, H( O' z
6 G1 O+ X0 K, l) S! ]( b( |a=1>2; b9 H+ t) n, P

& g; D$ m6 C* \6 C. D$ Y- s生成一个逻辑变量a,则
  I% T/ _" G8 ^" a! p$ R& _7 ?
% Q* o. G8 E* Ob=a+1
% T" o0 }) O8 g0 m  X' h4 }9 Q
时,matlab会判断正在进行数值运算,然后将逻辑变量a转化成数值变量,由于a在逻辑变量时表示false,所以转化时,a相当于数值变量0,因此会得到数值变量b=0+1=1。
, o8 m! f4 [9 N% B- H  Y2 J9 I% J; T  i& E4 x0 \1 R
2.流程控制

  _1 Z+ _6 q0 h5 L* o. u( s  t. }" U0 l
    matlab的流程控制和C语言类似,if和switch作为判断依据,相当于流程图的菱形框,for和while作为循环,相当于流程图的反向箭头。

) n% D! n4 \) S7 `  D; `
' _+ P6 V. b4 t# ?2.1if判断

* n" H: c1 K* x* i, `' Y9 y& v! w5 J4 z7 z* [6 z, D  x
    语法是:
9 C: `0 w6 v4 _. U6 x9 {) v% E* B( M. ]$ v5 Z  X
    1.if 逻辑变量1
7 W/ v4 F! {( K5 t5 F7 l           1.执行语句1
2 o1 x& a0 n2 `) d4 C                  1.elseif 逻辑变量2
3 S" m6 c3 {0 A6 @                         1.执行语句27 d" j& c- k/ N
                                  1.else( n' \6 v& S, Q3 k
                                         1.执行语句3
. u7 s& C* w: V2 r1 n                                                 1.end
( x- I+ V/ D: R: r
/ Y% k: C7 ?" {, [4 J
其含义与C语言中一致,是顺序判断,即逐个if或者elseif进行判断,若逻辑变量为1,则执行语句,若为0则进行下一个判断。其中逻辑变量经常用多个逻辑变量的逻辑运算结果来代替,例如我们经常看到的是
- F. E+ v! {& n9 Z- I' u+ f4 g
! j( O, ?' @  J. a/ s; Q
  • if x>1 && y>19 G; c9 Y& c* n
8 B! @' m% t! e8 j
7 l0 F- b% i5 K- T5 T
而不是先赋值再判断的1 x% w- o8 w- _. P' T/ t: D% w

. A2 G5 z9 a8 v! F
  • a=(x>1) && (y>1)" Y* _4 |6 m' v6 Z
         1.if a# C" e- A- j5 K* E

4 |- N5 C0 u7 h0 b# k# m" t! V

* S, J3 z# m. L# U1 r& Y  }
$ p# E  W' A( a7 E" |: c/ f3 [其实这两种方法是等效的。有时候为了书写和注释,也会先定义一个逻辑变量flag,然后再if flag。. e% x, J2 z# v. y  B/ p$ C

; W8 w6 o' C* q# ]# ~. @2.2switch判断
  l8 h# |. J" J* H

4 `7 ?5 r$ l& W( l; y    switch的语法是:* Y6 c$ [' ^1 U' N, Z: j
    1.switch 数值变量1
$ H- f1 B6 o' `5 O+ y% I  ^. f7 ?              1.case 数值15 _& |+ T- e; C" _" e
                    1.    执行语句15 x0 Y1 ^- s  [0 z6 \/ W% E- ~
                            1.case 数值2
5 G0 _1 Z/ N/ F5 C                                   1.    执行语句2; y( W5 a' y% |" d/ |9 D) C
                                          1.otherwise4 L) F) O# p. P: \! o0 M/ d
                                                1.    执行语句3: d$ L% O3 i0 ~  w! ~
                                                       1.end

4 R/ U6 u# L! S* m  K5 A% d" t. d: O7 i5 p( j7 t/ ]7 P7 E$ g/ r
switch与if最大的不同是,switch只进行一次判断,即根据数值变量1的值来决定执行哪一个case,而不像if会判断多个elseif。需要强调的是,只有当数值变量1==数值1时,才会执行语句1,而之前说过,==这个判断是有舍入误差的,因此switch一般用于数值变量1只取整数时,比如sfun的判断。对初学者而言,也可以先无视switch。$ Y% [4 n$ \. \4 l

4 u, a$ K$ u2 ]- Z0 F5 w2.3for循环
$ L7 v1 L& _" D$ E4 Q& l9 T5 Z9 P8 B
  P+ J* x; n& u% C% n) q2 m
    for循环的语法是:
' {, O* ^7 R5 a5 i0 a  X7 h    1.for 数值变量=向量
2 X! b6 B5 p2 d, ^, R: J- E2 @          1.    执行语句
6 B+ A1 s# e9 c$ I; Z; E8 C; {                 1.end

* y9 `5 ~' u6 n0 s/ R" D9 {( \* u
7 ~5 C7 Q$ G; [' Q5 m2 |其含义是,数值变量会取向量中的每一个值,然后执行语句,在执行语句中,数值变量是一个1*1的矩阵。matlab中程序换行有两种方法,第一种方法,只能从第一行换到第二行,具体操作如下,首先在第一行中写完命令之后按下空格键,然后再按下数字键盘上的小数点键,小数点数目为3,之后按下enter键就可以实现换行。 ...+Enter;第二种方法,直接按住Shift+Enter键可以直接实现换行. @+ u! ^3 [1 Z7 T5 }, i& T

5 \6 k- q$ _2 R  ifor a=[0 1 3]
& `! o8 r& i$ [7 ~1 L3 g3 L0 r
% {, V- P  w: E  Z$ P) g% d则会让a=0,执行语句,然后a=1,执行语句,最后a=3,执行语句。这里容易和赋值语句混淆,因为a=[0 1 3]是一个数值变量赋值,赋值后a是个向量,但加上了for后,a是1*1矩阵。另外,在数值变量赋值那段,我们说过有一种常用的赋值方法是"a=初始值:步长:终值",其结果是把a赋值成一个向量,因此这也广泛用于for语句中
( b. a9 s+ a) K2 @. u* Q* m! q

/ w* d4 L4 n7 m: O# l% c5 m+ \' c' K0 T: d& u2 g
  • for a=初始值:步长:终值
    4 @' @% M- ]2 s! u/ o
6 T& |1 W9 q& i$ f4 ^' y% T' s

- g/ t8 X1 h# Z. r则在执行语句中,a是一个遍历初值到终值的1*1矩阵。
) I. p7 }. G2 C3 `9 p) x7 L* c! Y2 e; M
2.4while循环

5 h: I$ h$ _# |9 D
8 T1 s1 v9 q- N$ p3 a    while语句的语法是:* M+ E& {+ T+ b& y% v
    1.while 逻辑变量# G% i; g  x2 N/ Q, Y- k, j( x
           1.    执行语句
' m# k' G  O0 i$ x                   1.end
5 h* `  \. U6 @% |8 R9 G6 t* J
) c! i3 l, }! w" [# w, m! P

5 V' i- {+ C# i- h- o# J( ~
4 i2 P' p$ y+ h+ H6 c0 u其含义是,当逻辑变量为1时,执行语句,直到逻辑变量为0,因此while的执行语句中,一定有改变逻辑变量的部分,否则就是死循环。比如写了while a<10,就一定会在执行语句中有类似a=a+1这样的赋值语句,使得若干次循环后,逻辑变量为0。总体而言,while并不如for稳定,所以初学者也可以无视while。
2 w0 t  q5 P- I6 J; }, k2 D1 N

' {9 [: l9 r8 M6 M- }

" o  w4 r- d) n* }2 {0 L
! w4 ]0 M8 Y$ L2 j+ H. a5 J5 p

+ M0 d" h- g- O/ h0 s* p  U& ]" r) i  [9 H2 {. ]2 [5 \( U6 U

- m3 a7 k. U* U- k1 Z
9 D3 e: p2 L; D4 J" i  q6 x( T7 }

' \' @& k2 V: w( j8 Z/ h1 l9 j' P0 H0 ~. |6 h
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-19 05:24 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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