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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 haidaowang 于 2019-11-14 10:35 编辑
9 G; a  j! k- t  _+ U
8 s6 w$ B5 B% m; n3 `5 I% }: K! i. M5 a, z8 \; Y8 {7 {
判断常用于数学中的分段问题,更为复杂的问题则需要流程控制。本篇介绍matlab中的相关语法,这些语法并不难,但却很容易混淆,一方面是和其他语言,例如C语言混淆;另一方面是和matlab自身的其他语句,例如赋值混淆。
4 S. L) a- t% L  ?: F  q2 L3 j" x5 L8 m* b* z
1.逻辑变量

# G$ B6 I  G$ g  U$ D+ e1.1逻辑变量的赋值

' Z3 u- a/ ~. x: h6 i  s$ J  i6 @3 j" O
    有些语言中,逻辑变量是一种专门的变量类型,其值为true或者false,matlab中也有这个类型,但其值为1或者0。赋值方式是“变量名=表达式”,变量名的命名规则与数值变量一样,表达式是一种判断,比如数值大小的判断,或者高级函数的判断。例如输入. x. r, {" m9 ]9 y8 c
# g8 t! N0 x0 w* q( X( N8 h3 v( u
a=1>2% X! T7 Q' `& Y

, y5 D( `! a. g/ |就定义一个逻辑变量a,其值是0,表示false,在workspace里可以看见a的类型是logical。& R% [2 @8 V/ q) k! g  T

6 k  ?# W7 g5 [% b+ t7 F5 i

- S& w% q/ @6 }( v, p& G# {0 ?/ p" c6 W0 J
4 O. n% v+ p( b" i
    对初学者,可以认为数值大小的判断,是指两个1*1维的数值变量的比较。数值大小比较的方法有:>大于;<小于;>=大于等于;<=小于等于;==等于;~=不等于6种。因为数值计算有舍入误差,所以等于这个判断,有时需要用, m  S" Z4 F. v9 Z5 @/ a4 N
% E9 k3 e) ]* d7 n
abs(x1-x2)<eps
# {$ ?. i. q( E& @( T& O
! ]7 s# e1 t, y这样的不等式来代替,其中eps是matlab中最小的非零数值,相当于舍入误差的标准。
+ p7 o* `8 }7 @' f8 R, Y' {# A5 r" @
- W: B6 C* d# I3 }
& t  r! p. Y5 }. U0 I4 C8 {    高级函数的判断,是指系统自带的一些函数,例如
6 c  i: `1 T1 ?& A% A0 U0 l9 {' b) c/ Y& x$ a+ j9 r; W
a=isprime(x)
% u9 t4 [- O0 K9 ~1 K* X3 _  q4 I9 x& k$ m+ y
用来判断x是否为质数,& U4 v! V0 e8 x+ E) q! Z. p1 R
- C. |6 h, o9 S+ t7 o
a=exist(x); o! l6 e; q7 F6 A- p
5 k: `* ~8 @/ Y4 J
用来判断是否存在变量、函数或者文件。: W( ]2 |4 P6 g( [, `. ~
% s3 a& S4 o* ^8 p+ [7 Y, F& G) _
1.2逻辑变量的逻辑运算

' Y' y2 t1 X( Q$ M' s$ e0 \( Z# t8 W8 Z2 |+ ~2 C) Q- `  k
逻辑变量的取值只有0或者1,他们之间可以进行逻辑运算,运算符有:&&与;||或;~非。这里需要注意:4 p- E3 m3 |4 ?0 f
1)~单独使用表示非运算,要区别于不等于~=的连用
6 l- Q& T( X( ]: w  G) g2)如果是高级函数的判断配合非运算,也可以实现判断,例如
7 {! G* L8 b9 U8 n) p& v& l( ]2 m7 h7 x$ p' X& D
  • a=~isprime(x)& e) O- _0 E( |$ j
9 d8 b+ _8 |- T( D- |

% }# ~# C8 Y  X" R+ Z0 u就相当于判断x是否为合数0 c% H" q- i3 L* e  X
# H7 g6 t( ^$ u3 C
1.3逻辑变量的数值运算

  {0 a9 O9 a2 v" D% h$ F& N/ b
" d9 Z& \9 ]% ~8 Q7 ^    matlab中逻辑变量可以参与数值运算,参与时,会被数值0和1代替。例如
  m0 p+ l1 [$ T0 }; B8 x9 v
: b& h/ j* Z0 Ia=1>2
% m, Y- j' Y6 {# j2 S. G: w5 _, J& T
生成一个逻辑变量a,则
& [0 h+ r/ I9 r; P! Y1 c4 s9 S* u- R: o5 e
b=a+1
: f, T0 Q, z' \2 @1 O$ Z, P( G" B* r( e! v: O
时,matlab会判断正在进行数值运算,然后将逻辑变量a转化成数值变量,由于a在逻辑变量时表示false,所以转化时,a相当于数值变量0,因此会得到数值变量b=0+1=1。1 G! s$ {7 w, w0 I/ l
  m! ~: C; l; H  ]9 B, q
2.流程控制

0 U+ Y4 D. f2 E3 N4 V) S2 R3 Q( @7 l* N/ W8 Z
    matlab的流程控制和C语言类似,if和switch作为判断依据,相当于流程图的菱形框,for和while作为循环,相当于流程图的反向箭头。

& a: M( d( Q( H, ~3 S$ I$ i4 @& T0 c
2.1if判断
. C0 A! a/ h) g! @: A/ Y$ c. Y

$ `1 {' W- N- q  ^: G' ?) W    语法是:/ s0 m& ]' A5 c& y8 d
7 Y$ o! Z7 l6 p! K! s, f! B
    1.if 逻辑变量1( K' J: ~3 \8 H8 @
           1.执行语句1: r+ n  {5 E3 `
                  1.elseif 逻辑变量2
  m4 W8 ~/ d+ H/ @1 ~                         1.执行语句27 c. }8 x  U0 B
                                  1.else% i6 t& h/ ?/ i2 O6 @2 w
                                         1.执行语句31 v- O* C& I) X7 b
                                                 1.end

$ N$ l6 T: ?  m8 j$ m
0 @0 Q% G9 A( e$ ~. d其含义与C语言中一致,是顺序判断,即逐个if或者elseif进行判断,若逻辑变量为1,则执行语句,若为0则进行下一个判断。其中逻辑变量经常用多个逻辑变量的逻辑运算结果来代替,例如我们经常看到的是! ?0 `* k9 p' w, x6 S) i& `

2 {1 a  g) f- |! g! b$ L. W
  • if x>1 && y>1: l. X3 p) K! z% k' }$ H

7 e+ ~, p3 X1 R% L" L2 S) ~2 _5 S
而不是先赋值再判断的
& g( h; l! C, Z5 x& s
0 k  q$ I. B3 n4 U
  • a=(x>1) && (y>1)( n4 a6 H5 ?# N
         1.if a
( D0 E8 k8 v2 e; j4 _
$ }& a. V. F0 v+ T
# D, @# x+ `- j4 B5 ^0 I) q

) |" ?4 X7 y1 Z; W5 r% P其实这两种方法是等效的。有时候为了书写和注释,也会先定义一个逻辑变量flag,然后再if flag。' A) b8 ~) ?& E& n
: y7 y  @: ]& z
2.2switch判断
7 A5 v1 K, w5 @+ C
! I# Z( q  Q, Q
    switch的语法是:
0 u( h1 d( |  T    1.switch 数值变量1. R" T. G4 M; ~
              1.case 数值1
' Z9 }4 H7 Q* W) l: o                    1.    执行语句1
8 q' ?  }# _% C2 @  Y                            1.case 数值26 I3 }+ X  k' J
                                   1.    执行语句2
' X5 _+ J" r- |+ N' @                                          1.otherwise+ Y+ b7 J! \3 b- U( t& H0 H
                                                1.    执行语句3
+ g$ N% W# `$ J- {                                                       1.end

2 I8 t( B! O9 q. T! u! ^/ k" G& J3 y: e) G
switch与if最大的不同是,switch只进行一次判断,即根据数值变量1的值来决定执行哪一个case,而不像if会判断多个elseif。需要强调的是,只有当数值变量1==数值1时,才会执行语句1,而之前说过,==这个判断是有舍入误差的,因此switch一般用于数值变量1只取整数时,比如sfun的判断。对初学者而言,也可以先无视switch。
' R5 }) m9 l  }" [7 w' a# h+ D9 [/ J2 _; ~0 L
2.3for循环
, S; f8 ^2 u/ l
$ G% j2 t: \3 ]' d9 U8 }3 D" n% C# T
    for循环的语法是:9 y- I% P* X0 c  C4 u, N- _
    1.for 数值变量=向量% {% d- ^2 e4 D* p5 k: v; O
          1.    执行语句* k( V, N( C" ^- L! x& ^
                 1.end

- k6 C4 O$ f: P9 S) T, S) [4 y7 {. g0 a0 Z& ^9 z! `! t& c9 _3 O9 G& T
其含义是,数值变量会取向量中的每一个值,然后执行语句,在执行语句中,数值变量是一个1*1的矩阵。matlab中程序换行有两种方法,第一种方法,只能从第一行换到第二行,具体操作如下,首先在第一行中写完命令之后按下空格键,然后再按下数字键盘上的小数点键,小数点数目为3,之后按下enter键就可以实现换行。 ...+Enter;第二种方法,直接按住Shift+Enter键可以直接实现换行" O% B1 O9 s( R0 I

9 A" j- S. p5 O& ?! m" ]for a=[0 1 3]
4 Y: c; d$ z) J# Q  R9 r1 c6 ~. \
, I' Y0 t/ E- `% ?: S则会让a=0,执行语句,然后a=1,执行语句,最后a=3,执行语句。这里容易和赋值语句混淆,因为a=[0 1 3]是一个数值变量赋值,赋值后a是个向量,但加上了for后,a是1*1矩阵。另外,在数值变量赋值那段,我们说过有一种常用的赋值方法是"a=初始值:步长:终值",其结果是把a赋值成一个向量,因此这也广泛用于for语句中
9 t7 D- ]0 ~& f; ~9 q2 X' g) _
5 ?1 I! q2 ?: [8 O
- Y, P, \6 E0 X
, C; {8 Q8 Y$ a
  • for a=初始值:步长:终值0 x  w4 m) |- K' Q/ D- A
& ~% I; H4 W5 a/ q4 L# t

; }- {1 ~4 L! g, ~$ c则在执行语句中,a是一个遍历初值到终值的1*1矩阵。& K+ W. Q' ^2 ]$ o% H0 y! `
  i- d" I% c% G- v) R( X! ]+ h/ \
2.4while循环

9 ^$ B4 @$ V0 r8 S3 d1 E  ?3 C5 W& H/ c
    while语句的语法是:
! Q: i" ^$ ~; i, T) j* [0 \2 [    1.while 逻辑变量
% w! d$ v+ ~! R4 H' k7 r           1.    执行语句
: g0 j5 E; Z5 c4 ~3 r                   1.end3 ]" l( o* {  Y5 y8 @( X% j# X) h

: }3 z" v0 ~  k; u- ~) q
2 x) t( l$ D' w+ u' t; B

8 d' r& f, K  D/ H4 X+ D其含义是,当逻辑变量为1时,执行语句,直到逻辑变量为0,因此while的执行语句中,一定有改变逻辑变量的部分,否则就是死循环。比如写了while a<10,就一定会在执行语句中有类似a=a+1这样的赋值语句,使得若干次循环后,逻辑变量为0。总体而言,while并不如for稳定,所以初学者也可以无视while。
: `' P6 d& R0 Q% N0 Y8 v: U

5 M9 t: P: ?% p# [
3 I0 d: V: N# W* T- S9 Y- z
5 O, K; ?3 T  |

+ c) V2 T% a- b/ u: G  r2 W6 t8 {' Q" t9 c
  P* L# I7 }! W) m& |

- O" C& P" |/ c! u
  I2 x: u: i  D; F0 ]9 t

5 H- T: C1 l, h3 F* V" o$ O3 M
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-24 20:56 , Processed in 0.171875 second(s), 27 queries , Gzip On.

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

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

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