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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 haidaowang 于 2019-11-14 10:35 编辑 ' W; U) `* U7 `. q/ R. W
4 m. c: G+ P; e9 E: H

0 @5 o! h' h+ a& ]- |, H判断常用于数学中的分段问题,更为复杂的问题则需要流程控制。本篇介绍matlab中的相关语法,这些语法并不难,但却很容易混淆,一方面是和其他语言,例如C语言混淆;另一方面是和matlab自身的其他语句,例如赋值混淆。
" o* a. e7 K& C# d  w* f  U& W8 X
1.逻辑变量

  s. W' [3 k# j; g. k1.1逻辑变量的赋值

7 Z( p) U1 }2 @1 r
- g! Q1 u) A" i3 y% j1 c) B    有些语言中,逻辑变量是一种专门的变量类型,其值为true或者false,matlab中也有这个类型,但其值为1或者0。赋值方式是“变量名=表达式”,变量名的命名规则与数值变量一样,表达式是一种判断,比如数值大小的判断,或者高级函数的判断。例如输入
7 B7 C' ?6 G$ H" E8 }3 J# x* Q( \3 @& X" L" Q* I( E
a=1>2; \7 A: J  @1 m# W" z# |' S* u

* v+ |/ Y7 @( p* v就定义一个逻辑变量a,其值是0,表示false,在workspace里可以看见a的类型是logical。" t( g1 |/ }( E5 t7 @: w/ U9 [

9 {# u1 o2 R4 B

4 o5 {+ H7 e* K, d" g( d- T
8 v+ i% r* Q8 h" ?) x' a' b/ d6 o6 Y  i: s! f# m  ]
    对初学者,可以认为数值大小的判断,是指两个1*1维的数值变量的比较。数值大小比较的方法有:>大于;<小于;>=大于等于;<=小于等于;==等于;~=不等于6种。因为数值计算有舍入误差,所以等于这个判断,有时需要用
* K+ X+ ?8 k. ?/ [" {
- ^# h* o/ ~3 e  oabs(x1-x2)<eps
' O5 v" ]8 J( @+ |, a( K3 Y# x& J+ X: G$ P7 A2 m( ^5 n; o8 q2 Y! R! D
这样的不等式来代替,其中eps是matlab中最小的非零数值,相当于舍入误差的标准。/ p+ `: G9 _1 `3 F) h

+ o' L1 z4 U" Y+ Y5 Z% `$ R2 b, C+ i) R) l( T
    高级函数的判断,是指系统自带的一些函数,例如
( t$ t/ y7 O6 x8 ~: B, C2 _6 _3 `% c$ R2 x6 A$ m
a=isprime(x)! ]4 c0 Z2 K$ g3 z9 X& D( Q

& ~6 V2 }/ |2 i! J; q+ g! l: H  W用来判断x是否为质数,# ]1 J: ?$ `6 `: ~# L1 _% ?) @

6 }1 L) y: D" j# c0 Ta=exist(x)
7 g$ d+ r2 k. N  f+ U, n
$ K/ P$ c) L7 o/ ~. ]+ b/ Z用来判断是否存在变量、函数或者文件。, Z" k' t! U$ P: J- ?: n+ J" S

& X  R! b+ E! m/ I  d$ y2 I1.2逻辑变量的逻辑运算
2 r6 U  [. L  C* s

8 O% R4 D% n6 T; B逻辑变量的取值只有0或者1,他们之间可以进行逻辑运算,运算符有:&&与;||或;~非。这里需要注意:7 u/ C( D3 g9 h" z) U
1)~单独使用表示非运算,要区别于不等于~=的连用
/ U7 k3 Q7 B2 f# Y2 `: I2)如果是高级函数的判断配合非运算,也可以实现判断,例如
! t4 n; N( Z" k, b0 W, e
7 c$ u% q5 H' i# u' R  G
  • a=~isprime(x)
    ) R4 V" {* n8 x, J% v. d# U2 m$ ?9 _- \6 z

0 B8 j+ C+ Y0 C( ^# |9 T4 s5 k  _; m
( \2 K5 r1 o' d) a9 b# @5 m就相当于判断x是否为合数9 I, A* j6 O- t

7 ?0 [6 T) I2 f" e/ Y. B: ]1.3逻辑变量的数值运算

" K( w3 R- c  l  f- a0 U3 F0 z0 t; r" e- s
    matlab中逻辑变量可以参与数值运算,参与时,会被数值0和1代替。例如
" u- u* }8 }; `+ t( N$ T& ?" y- ^) Y- B0 S
a=1>22 _  M. P" U+ x8 U- B$ Z
/ o  s  p5 q" U7 K1 \7 J8 S% H, D2 g
生成一个逻辑变量a,则' ]9 O* `7 J) V4 [3 h; @" X; ?4 h( x
' F6 [% z9 W9 A4 C9 H
b=a+1
7 B- w8 m3 o( \( G2 U& g2 K7 p- s4 Q* m+ b5 f3 e  o
时,matlab会判断正在进行数值运算,然后将逻辑变量a转化成数值变量,由于a在逻辑变量时表示false,所以转化时,a相当于数值变量0,因此会得到数值变量b=0+1=1。9 M" g( }* i$ R/ ^7 z: E8 |
" X0 U& R5 k6 t; R5 r
2.流程控制
" Y9 J% Z! `, }4 T
& I& v. q/ y5 j! k1 p1 g8 {5 p
    matlab的流程控制和C语言类似,if和switch作为判断依据,相当于流程图的菱形框,for和while作为循环,相当于流程图的反向箭头。
( d$ Q% m+ u  f/ b1 T9 ]! d7 h

! A$ ]/ \8 g1 w* t0 W4 L7 D7 \2.1if判断

" d6 s& L: x# i+ Z) b3 Z' r/ C) }$ U5 J6 J% F/ m
    语法是:) I1 m4 B$ H0 P7 k' y3 C( @

/ h1 E4 y1 B4 q3 @, }  n: B    1.if 逻辑变量1
/ x# L& m! d( R/ M; f4 R           1.执行语句1
8 f& G% i4 Q0 D' g4 s                  1.elseif 逻辑变量2% j0 f9 v* K- l4 D1 t) Q
                         1.执行语句28 Z6 K" D2 G2 O) g; d5 }: A2 U
                                  1.else
* U5 g( O( J* _2 x! v. L                                         1.执行语句3
4 K: R+ k. [3 P# r6 J/ y1 \0 L! s                                                 1.end
6 l3 q( s& B8 t9 _' X7 M) a5 E
0 d) o$ T5 S+ E3 }8 g
其含义与C语言中一致,是顺序判断,即逐个if或者elseif进行判断,若逻辑变量为1,则执行语句,若为0则进行下一个判断。其中逻辑变量经常用多个逻辑变量的逻辑运算结果来代替,例如我们经常看到的是
& @% K" D4 b# o- N; o. x. l: P1 [( w
  • if x>1 && y>1
    # P( G. V' K6 i) ]' v

' B% L7 O: ~/ P0 _, t6 ^3 b, r+ O/ b' }
而不是先赋值再判断的2 d% D, M0 f6 B8 _3 ?5 G

1 U$ G8 d" Y9 ?) o. M
  • a=(x>1) && (y>1)3 u: [2 s* d' S( V$ a: U
         1.if a% s8 S% b: x' Y& z
! G" s4 J& G7 D  R

& D# z2 C4 H! {2 F& b+ I; L: \0 _) P3 Q2 @8 Q$ Q) z
其实这两种方法是等效的。有时候为了书写和注释,也会先定义一个逻辑变量flag,然后再if flag。
# A/ H# Q# y' Z& m9 j
" ]6 k2 \# B7 E: R& y2.2switch判断
3 V, w5 p! P8 p8 K) l
* d( a  q" P# K+ K! Z& m
    switch的语法是:
: G  l7 R6 y! H4 |1 f    1.switch 数值变量1
5 q! S9 M' }0 G: `6 u$ g              1.case 数值1
' `5 V% q5 q3 t9 [# _* l: |' ~' u                    1.    执行语句1% }$ C0 h& i9 P4 C8 o. d2 ]0 C, X, [
                            1.case 数值2$ {1 B# I& L2 f! {3 I% J( I% g
                                   1.    执行语句2
' q; N" y1 l# \$ F! k5 W% B2 C$ E                                          1.otherwise& ?. x4 q4 a. h8 [
                                                1.    执行语句3
9 l' N* Q4 \8 G, P- P  o+ P                                                       1.end
) }7 U$ R& C! G( q) Y3 k. _4 M

% c: W6 M2 O2 F: qswitch与if最大的不同是,switch只进行一次判断,即根据数值变量1的值来决定执行哪一个case,而不像if会判断多个elseif。需要强调的是,只有当数值变量1==数值1时,才会执行语句1,而之前说过,==这个判断是有舍入误差的,因此switch一般用于数值变量1只取整数时,比如sfun的判断。对初学者而言,也可以先无视switch。! B8 W9 G9 n, `
. A8 ?; i/ m- i  h
2.3for循环

. ?5 N0 L! H2 e9 I% h  N+ \" m0 ~
    for循环的语法是:: |* J  p: |" w
    1.for 数值变量=向量3 x6 G- `. w( c/ h4 g# T2 r$ f
          1.    执行语句
  g- \4 n- }& {                 1.end
- }$ {. j" U2 I- ?8 y

7 s0 h* O) Z8 B& T其含义是,数值变量会取向量中的每一个值,然后执行语句,在执行语句中,数值变量是一个1*1的矩阵。matlab中程序换行有两种方法,第一种方法,只能从第一行换到第二行,具体操作如下,首先在第一行中写完命令之后按下空格键,然后再按下数字键盘上的小数点键,小数点数目为3,之后按下enter键就可以实现换行。 ...+Enter;第二种方法,直接按住Shift+Enter键可以直接实现换行2 b1 z  G6 S7 k8 H, O
$ A: g' U7 C+ P) ]4 }
for a=[0 1 3]
2 a- l. `5 k8 l1 d
" e- i: t% y/ I  U5 a6 B. R! ~. q  ^则会让a=0,执行语句,然后a=1,执行语句,最后a=3,执行语句。这里容易和赋值语句混淆,因为a=[0 1 3]是一个数值变量赋值,赋值后a是个向量,但加上了for后,a是1*1矩阵。另外,在数值变量赋值那段,我们说过有一种常用的赋值方法是"a=初始值:步长:终值",其结果是把a赋值成一个向量,因此这也广泛用于for语句中
! ~* k/ `% u6 y. c  \5 }
1 y1 O4 F. O& `) X3 \
* i6 E% h. C( H( q# Y

- F: `4 A  E. m8 e
  • for a=初始值:步长:终值8 F- q, N1 Y7 W! o
+ I0 M. c# j3 [

' S: n7 Y) c& o* T8 K则在执行语句中,a是一个遍历初值到终值的1*1矩阵。
, T0 d2 s. S  z! {: @, U0 p( [2 }$ {8 H
2.4while循环
2 I4 R1 g; t, U& I. Z2 B  l

) u* K7 E4 k6 ]    while语句的语法是:
$ S7 f  h7 ]6 @: @9 m    1.while 逻辑变量
: |: c; I9 \1 S. K- P4 _           1.    执行语句# M+ ^/ ~6 X' }# @2 E( q+ F: }6 P' A
                   1.end
5 J) Z( S0 i) G& `
6 l4 x0 X. s7 |/ _

# Z& Q7 R: A( V6 h
0 @0 }1 |: Y1 c3 @% p* t: b, Y其含义是,当逻辑变量为1时,执行语句,直到逻辑变量为0,因此while的执行语句中,一定有改变逻辑变量的部分,否则就是死循环。比如写了while a<10,就一定会在执行语句中有类似a=a+1这样的赋值语句,使得若干次循环后,逻辑变量为0。总体而言,while并不如for稳定,所以初学者也可以无视while。
+ c' E. ]" M0 M  r

' X. R. r; H$ Z1 `
. _8 L( O1 [0 @" u9 m2 z0 }: I# `

7 w5 }+ Z- ?! U: F3 O! G; J! C9 S; V

3 n+ Q; J  B6 a: b! C; [: B3 T; p: }8 g
* x0 K+ x! U7 e- U

1 `+ f& \4 W. L, p

+ i7 ?. K$ P* v# d* T2 h& X8 O, \4 c, [( S, m& D$ @8 h* r1 c
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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