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

MATLAB基础教程(4)介绍一下变量类型与赋值

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
! ?' Z7 F9 h% W8 m( @
matlab解决问题的最基本思路是建立脚本文件,那么脚本文件的第一段就是定义一些变量,这和C语言等编程思想是一样的。matlab提供的变量类型很多,最基础的是三种:数值变量、符号变量、字符串,其他的类型还有cell、table等。这里仅说明最基础的变量类型。& i1 \2 u8 c% W4 }/ \

" m5 M# _8 u2 S& x1.数值变量
  K# _7 K3 F; w6 h
    matlab中所有的数值变量都是矩阵,赋值时,以方括号作为开头和结尾,以英文逗号或空格分割同行元素,以英文分号分割各列。例如在Command Window里输入
: b) O$ ~/ |/ O( K! \
: _: v7 K7 y$ l$ W( h" Aa=[1 2;3 4]
% R0 v  y4 a9 Z# {( K

- g" J6 e  [& E9 ?5 y) |
* q- u( r1 j& h3 R" G
$ |2 R/ U7 _3 D. W  C; c- z
3 t0 Y: u# d0 O' `
可以看到运算结果,a是一个数值变量。同时workspace里出现一个田字形的变量a,说明变量a的类型是数值型。+ p% C/ ?6 ^: e1 L& a

* @! }) }/ h0 F8 Y& t3 Z, M$ Q  ]
. K$ O5 F/ q! f/ b4 Q

# C8 s* X  {0 U1 X+ M: t$ N0 i) O向量和数字可以视为特殊的矩阵,例如
: D: M3 G/ L. {9 A, F
+ c( P; L: g+ V/ ^a=[1 2] : a: Q7 |# a6 ^5 w2 s* j9 w

3 O/ G2 `( {- b' w# k( Xa=[1;2]8 E( M! }7 T9 z, N% |0 ^( c' f
* J1 P: T# _. H) d5 V  O8 q4 z
分别是行向量和列向量。
  u# k) \- E! w1 W0 C; u9 \! I) e; U7 p  I4 C. J$ y: y
a=[1]  可以简写为a=1   是数字。

; L. g4 S8 I  t4 u4 e  {/ N0 S9 H! S7 g6 V/ _6 G
    数值变量的命名要求是英文字母开头,不能包含特殊符号,大小写敏感。这里推荐采用下划线来进行分割,例如value_of_A,这和其他编程语言的命名规则大体相当。

" L6 A: T7 p7 a) s1 g5 k6 i' [4 s8 \/ [& [' L: @8 g& H4 ]7 h# c
    赋值中,有时需要用到等差数列,例如定义一个向量a=[1 2 3],如果比较长,赋值很麻烦,所以matlab提供了一个简单的方法
  @* W% _; M  @7 r
* Q  ]6 j. i/ @& r  I; \/ Ca=[1:1:3]8 B% J* k: O$ L2 X( ]: e0 l( ?
: o  }( M! f! a$ n8 ^6 q; M
这里两个冒号的意思是起始值:步长:终值。采用这种赋值方式时可以获得一个等差数列行向量,并可以省略两侧的方括号。当步长为1时,可以省略步长和一个冒号,于是可以简写为$ e' r5 g: j3 o. I9 ^6 b1 Q; a

" {+ w- i8 F- H+ x) f5 ]& ^
  • a=1:34 X2 V* P! `& q. c% k

3 l: d# h- p% F( d% e

+ |# T2 z: R; g% I3 Q
% a  r$ `# ~& l3 [, C. a+ D
4 |, C' J* w3 t; s! x' [' ]. J. _# y
    另一种灵活的赋值方法是分块矩阵,其方法是变量名后面加圆括号,圆括号中加序号。例如5 C5 ^8 W1 e- [# W
$ E, t: }7 ]/ k- Y& z. E
a=[1 2;3 4]
; P0 \  U& O7 a0 F' @: E3 T3 E2 L% u- Q3 W. [. p
定义变量a之后,* A( R& L+ N4 G. K6 {, p2 b

; W1 ~% d" h5 @6 I! l$ t( ]b=a(1,2)
) _/ m" M$ R, j& k- [* u1 H5 N+ D/ g5 _4 U9 b7 R' F
就可以把a的第一行第二列元素赋值给b,当然也可以用
. U  Q' B* Y1 |4 v, ?+ T& L" E! r$ I7 W& O5 Q5 |
a(1,2)=1! R9 U1 e+ e: H- Y/ J
3 `; Y" B1 K. m3 Y  z% _2 z  h
来修改矩阵中部分元素的值。这里需要注意,序号必须是自然数,且不能是零。当矩阵中有多个元素需要赋值时,可以将序号部分改成向量,例如
8 _4 B: Z0 p$ o% W9 p! O
9 t8 W* S' \. _6 I# k9 k$ qa([1 2],[1 2])=[1 2;3 4]
/ O% O* g- q4 O4 m) l. J, S
# U) e3 p9 n' I) m! ~+ n4 F  ?中把行数和列数都用向量表示,就是说对矩阵a的第1和2行,第1和2列,总共4个元素赋值。更进一步,也可以有a([1 2],1)表示a的第一列,也可以写成
6 t6 w2 j0 x7 D4 Ya(1:end,1)# I* e& x  i7 S+ j8 W) M$ e* U
0 @/ y. R7 a3 N+ B5 H# k
这里的end表示终点,即a的行数2,也可以更进一步简写成
+ F, k& Y$ _9 A- d, K! T. Z4 S  `  Q( ^1 H7 L
a(:,1)
8 U) W' c1 f- R' H8 u
' w0 _5 T( b# ~5 X这里的冒号表示从头至尾。这类赋值方法最为常用,但基本的语法非常简单,方括号表示矩阵开头和结尾,圆括号表示从矩阵中选取部分,把握这个原则,有利于读懂程序。

: h/ f4 U8 q) z7 l$ n3 o$ ?! T2 y
    当然分块矩阵也可以( e3 g. t& K  u% ^1 v! O
' n$ R4 B+ K; G0 B
b=[a a]
3 y+ W0 Q* O7 i; i4 h+ K: D
. O& b2 K4 F& X! y2 H0 F这样的赋值方法,但需要注意的是,方括号中的元素必须满足矩阵的行列数要求,例如: a% @4 f$ d2 M6 h1 G$ R/ R% t

, v' C2 e9 i5 G/ A% Za=[1 1]' m& U! s' |: g& J! ]) X! P/ V! j5 t
0 @/ S3 C% I2 s; H0 q
b=[1;1]
; z* Q- Q( n6 X, Y# N; }, ]! y2 O, Q/ H
c=[a b]
4 t# @8 I3 `7 Y8 G: Z6 u0 [) f  o0 G; `0 j" x
就会引起错误,因为此时matlab无法确定c的行列数。
2 T  x9 V$ g/ f" ]( p4 w, J
) d, j8 E! x  A- B% J
2.符号变量
/ K8 j; ]( X4 _0 |! A8 f  q

8 o  w# Q/ c" n    总体而言,符号变量比数值变量简单得多,因为变化非常少,常用的赋值命令是9 a: U, b4 F, U/ M+ c- g
$ o1 {% q3 t8 [4 H
syms a b3 J( e, j9 [* L& m) p8 P

1 s( _+ H& v! f, msyms表示这里要定义一些符号变量,a和b是变量名,符号变量的命名规则和数值变量一样。有时候也采用
8 u  {, w2 w! {; s+ u
/ _8 B2 R( k* @7 psyms a real
1 w) s' `- m1 n+ I: Q7 i) |# S
5 U3 |1 f" c5 y; ]来强调a是实数变量,具体可以doc syms来获得帮助。
8 h/ i& N+ v$ B, \4 {
8 s/ |6 s- ?3 K
    有些变量之间存在依赖关系,此时可以定义: s; y& y: C4 [2 Z' [4 p  I
2 o! Y5 E9 ~" @4 D+ b) G
syms x y(x)' w/ Z; }6 O; e% I
$ i1 }  h6 ~" X7 Z9 D
这里声明x是一个符号变量,又声明y是一个符号变量,且y的值由x决定,这相当于数学中函数的概念。当然具体的函数关系并没有明确规定。也可以6 k1 A: \0 A1 E- t$ e
; ^! Q4 f% |. {, r6 z
syms x y z(x,y)  E- z8 [5 f% l: q+ Q
6 K* O" W7 s! i  Z% ?  c
来定义符号变量z,z依赖x和y。这相当于二元函数的概念。这里的圆括号显然和数值变量中的圆括号含义完全不同,这也是学习matlab最不习惯的地方,同一个符号,由于变量类型不同会有完全不同的含义。所以在学习matlab的过程中,一定要区分数值变量和符号变量。
6 F+ {' u; [/ m7 J1 b! n
- ]' V/ B/ N  M$ o
$ D, r4 k/ Q$ _
    上述方法定义的符号变量是一个数,或者1*1矩阵,matlab中也可以定义符号矩阵,例如1 ]( O! R5 m6 z7 Q+ U% ~2 Q

5 V! ^; T/ i  G5 V0 {; Esyms a11 a12 a21 a22
: Q5 s% M# o" {8 D" A) n7 X2 X8 z3 X) H' L* k0 \2 c
A=[a11 a12;a21 a22]
7 _7 S! U$ Q) n! E7 g5 u1 \" z1 `# I- D8 c6 y3 `1 R. s4 T
就可以获得一个矩阵符号变量A。
2 F! I. C1 ~: {
+ J3 v6 D4 V1 Z7 m) m* I4 c
  定义符号变量后,workspace中出现相应的变量名,图形不是数值变量的田字形,而是方框里有个立方体,双击后可以看到行列数。
8 S& g, a5 K0 ?% \& h; m: n: L  I, L

& W# a& p. z4 N, X' d* C: t! Q5 w( L6 n& |8 x) f! L9 E1 g
3.字符串

9 z: y3 l, `$ U# w2 I' B) A
+ z! ]1 ?) ]1 ^+ L) o    比数值、符号更为简单的就是字符串了,其定义方法是以单引号开头和结尾,例如
2 x5 P! O( @/ H  k! O8 n. L
+ [, Y+ b* I. B2 {$ l+ Ha='hello world'
$ ]% }$ D5 D6 {7 f9 l" b% t% K' D$ m; N4 ^7 E2 ~/ B: X
就定义了一个字符串a,其值为你好世界。matlab中较为特殊的是,字符串可视为行向量,例如
" \! M" I/ M! {1 P4 g6 n7 i' Y/ s' }3 k1 C
  • b='hello '
  • c='world'
  • a=[b c]. K4 d  L( c5 `. C% y9 F. U
( Q2 B) Y- X6 q4 J0 W. w3 Q1 a

2 r. a6 I+ y- W# Q* I5 Z也可以获得字符串a,其值为你好世界。另外,有时也可以将字符串视为矩阵,例如9 c3 l. }, f9 f; g: O; Z
5 `. u+ D- @" j) f
a=['ab';'cd']- Y5 C5 d. {& t* T& k( }% G: G, [3 _9 S
4 ]+ n% A+ A* ~5 M- d4 o
但这种用法很罕见,同时要求各行字符串长度一样,否则将违反矩阵行列数规定。

! [) [' m" T  ?  e& S) }: W6 X: D* b  |) z5 [) V/ C/ k& S
    当然字符串的值也可以是特殊符号,比如1 c) H2 e2 k- x

/ {. h; e8 x& A" \: q
  • ',
    ; r3 ]( P3 X) k- e! W' _) Q, F+ z& j
) z. ^: a* C2 K* l- T. u+ \
就定义了逗号,而最特殊的就是定义单引号,因为单引号会和字符串定义中的单引号混淆,因此matlab中用两个单引号表示一个单引号,也就是
: O  o$ |+ H) g  Z' M3 G* Z6 Y* c( Q$ Q- ^
  • a=''''8 P% P# d* J+ a* p; ~' o
& ~1 b& H5 ~- R, I
表示a是一个字符变量,值是一个单引号。语句中第一和第四个单引号是字符串类型的开头和结尾,中间两个单引号用来表示一个单引号。

* ?- D8 q; }8 _% R: b) `) g  N+ _: q+ x9 R9 n
    定义字符串变量后,workspace中出现相应的变量名,图像是方框里写了ch,双击后可以看到行列数。+ G, b+ ]6 ^4 |& ~6 D
7 l( D" _3 c6 d

$ d& U* L5 x& v0 O' P
% C7 Y; |0 V6 E8 U
( A3 c/ m" ~# @7 h# V4 y0 w
6 U4 j3 s) ?9 X6 X' k) v# v  x
; l3 ?# N4 H! |/ _, E7 [6 H! |, `7 M6 b7 i+ c

* [# U7 k2 l+ e
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-4 16:50 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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