|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
9 [. J4 \ {: Y8 b9 Q( umatlab解决问题的最基本思路是建立脚本文件,那么脚本文件的第一段就是定义一些变量,这和C语言等编程思想是一样的。matlab提供的变量类型很多,最基础的是三种:数值变量、符号变量、字符串,其他的类型还有cell、table等。这里仅说明最基础的变量类型。
; S; R8 x q+ U6 C( S# F& i# c7 a: c3 A* @& B
1.数值变量
- `9 y! l' C* c. U ~ matlab中所有的数值变量都是矩阵,赋值时,以方括号作为开头和结尾,以英文逗号或空格分割同行元素,以英文分号分割各列。例如在Command Window里输入9 W# z( Y+ E. Y, j* V: F- a
& @4 j: Y# c2 }4 J, |: i7 ea=[1 2;3 4]
' H+ v5 G, D$ m4 b) w
0 G# Z- B' a$ ` v! M$ { s+ E2 w$ p# U x2 r
: k( Q W, {- u
S5 v8 l1 V: V T L* Q6 f可以看到运算结果,a是一个数值变量。同时workspace里出现一个田字形的变量a,说明变量a的类型是数值型。
/ y {( R) U7 _: {& |+ x
" \# y( c. L1 d- a, u
4 ?- k& _% ^. g. p) h
( Y* p1 g# u! C9 ?( X! g/ P2 w向量和数字可以视为特殊的矩阵,例如+ o8 l3 V" h9 {
; Q \: r( W+ {* F; t
a=[1 2]
) a9 c3 D8 ?4 C" q& o' z5 Q3 H x. R! {. Q: C
a=[1;2]
: J* F( @/ v, n* `3 T) A% V& c
! T4 c( O/ H9 J! P5 L分别是行向量和列向量。
3 x; Z" l h5 D2 L, s0 B) L7 \* N/ ~3 @5 L- r$ ?+ o
a=[1] 可以简写为a=1 是数字。
6 U& R' t f/ z. K2 f
& C. S. ~8 M7 v! Y 数值变量的命名要求是英文字母开头,不能包含特殊符号,大小写敏感。这里推荐采用下划线来进行分割,例如value_of_A,这和其他编程语言的命名规则大体相当。
* ^" P9 ]3 @( z8 k3 p& t3 y8 {' g- j4 o+ v9 Q
赋值中,有时需要用到等差数列,例如定义一个向量a=[1 2 3],如果比较长,赋值很麻烦,所以matlab提供了一个简单的方法5 _8 M% d5 a$ y6 \9 Y, ^% C0 K& @
/ g/ I+ z+ b3 e* i: O- W1 Va=[1:1:3]
5 H4 s: }5 N; h9 p& E1 x+ `, V6 x: n1 K: O' q
这里两个冒号的意思是起始值:步长:终值。采用这种赋值方式时可以获得一个等差数列行向量,并可以省略两侧的方括号。当步长为1时,可以省略步长和一个冒号,于是可以简写为
# J2 R5 D$ o5 H2 g9 A# x
) S2 ^& G0 t# g g' f- a=1:3
; a5 ?. e1 o9 n- S# H& D ) K* A$ ?( C6 E1 k$ h+ \
0 R2 k) n: ^/ T% N: T
. p( }8 d' C5 `, B* s1 D* v5 O* ]+ ^% ^# W
另一种灵活的赋值方法是分块矩阵,其方法是变量名后面加圆括号,圆括号中加序号。例如$ |* r7 \ \# |. r" N
) Z& C% D6 J# n- n6 t. B3 D7 _
a=[1 2;3 4]
9 T5 N2 v* ]: d: a# V+ v# ~: {/ Z/ ]% ?3 q
定义变量a之后,
w4 a$ O4 p8 A' `
% u& N: m0 b ub=a(1,2)7 m6 p3 t3 W) u, M9 K5 E- a4 X
, H. q1 d3 x; [1 `8 [
就可以把a的第一行第二列元素赋值给b,当然也可以用
- }5 `* l- Z; _
/ j# a$ `- _' O6 Pa(1,2)=16 P* Y |/ |/ |: n- o+ ?
3 A& d+ v9 k6 _1 H4 u来修改矩阵中部分元素的值。这里需要注意,序号必须是自然数,且不能是零。当矩阵中有多个元素需要赋值时,可以将序号部分改成向量,例如! s' h5 D& b: u' ~; s9 S3 S( v
. t* q, L' y& p4 }0 c9 Fa([1 2],[1 2])=[1 2;3 4]
9 h, R% L8 [( m( P9 V. h
1 v/ g& J, x; r+ ~. F+ @中把行数和列数都用向量表示,就是说对矩阵a的第1和2行,第1和2列,总共4个元素赋值。更进一步,也可以有a([1 2],1)表示a的第一列,也可以写成
) a1 u8 K' }+ w- w2 k/ xa(1:end,1)
: ?2 o K" B5 E- U1 e9 ?7 ?9 b# P" E$ l3 i
这里的end表示终点,即a的行数2,也可以更进一步简写成
1 Q) Y2 D$ i2 N7 _' D: l# |( P# o* N }8 x" x W0 L* Q5 C) I8 l
a(:,1)
0 h7 d, k5 O7 u0 G7 h' F7 G$ q* p @: s, R
这里的冒号表示从头至尾。这类赋值方法最为常用,但基本的语法非常简单,方括号表示矩阵开头和结尾,圆括号表示从矩阵中选取部分,把握这个原则,有利于读懂程序。
; v' K- a( A6 E$ t0 l7 K% a, N
9 J$ v$ J7 o( x1 t5 q2 f 当然分块矩阵也可以% D* V1 K# A( u! w
0 X* X" ]. o; k) |' u: l& M8 b
b=[a a]
9 q6 N6 n5 W, R/ N& E) [8 B: T _! \1 X
这样的赋值方法,但需要注意的是,方括号中的元素必须满足矩阵的行列数要求,例如
! ~2 u! |* _8 e$ N% }6 O0 I: j: [5 A. I9 F
a=[1 1]
! k6 x0 E' F1 @; G8 E* G& u4 H0 F$ ?1 \8 k
b=[1;1]! u7 C' _& o0 [0 B) }" j+ i
! D5 p) B4 M5 c; z6 Q! J$ [
c=[a b]
% P* G$ | \, ~' J
3 H4 O: Z5 P4 k. p就会引起错误,因为此时matlab无法确定c的行列数。
; h3 k: Z; O) U3 c* c7 u
1 j4 s# y; n1 U; j+ z5 h- f2.符号变量
' ?7 Z# b8 f: O3 Q. j# \# Z& Q8 }; N
总体而言,符号变量比数值变量简单得多,因为变化非常少,常用的赋值命令是7 V5 T& o9 W# f" D6 q4 h
4 }- E& C4 D( \& b
syms a b
& Q7 V5 L. y7 w- T9 g* t
% ]* K: w6 K3 @* N: w# ~# l a$ vsyms表示这里要定义一些符号变量,a和b是变量名,符号变量的命名规则和数值变量一样。有时候也采用: z, S% |) k2 Y7 n
0 o: a/ w8 a* a( I/ q# D0 p
syms a real+ \1 G0 I0 W0 U' M! b
+ g% ?8 W- @: Z, ?
来强调a是实数变量,具体可以doc syms来获得帮助。
) |# ? B& n) m5 Y4 u% g6 A1 O! ^' t9 s g9 Y P9 G t
有些变量之间存在依赖关系,此时可以定义+ y* D F# t% K. {) t) p% R
/ L, a$ N* V. q) s( W% ?
syms x y(x)
& h2 P4 m3 s2 O$ G! R+ _" [" i" M. x& H8 Y" W
这里声明x是一个符号变量,又声明y是一个符号变量,且y的值由x决定,这相当于数学中函数的概念。当然具体的函数关系并没有明确规定。也可以- e o' R, z8 M4 {: u
2 t% K' A9 Q- x& Osyms x y z(x,y)
9 C/ G0 F6 ?8 A, Z6 r7 |; M1 N+ `! ]" q [; m- O
来定义符号变量z,z依赖x和y。这相当于二元函数的概念。这里的圆括号显然和数值变量中的圆括号含义完全不同,这也是学习matlab最不习惯的地方,同一个符号,由于变量类型不同会有完全不同的含义。所以在学习matlab的过程中,一定要区分数值变量和符号变量。8 \6 O9 \1 W0 {
' o0 s& |2 }: e/ v! r7 ?7 s! y B
# P, P X8 y/ q' c4 o5 ^ Q 上述方法定义的符号变量是一个数,或者1*1矩阵,matlab中也可以定义符号矩阵,例如6 w' b' y/ q- _) Z* U4 t8 M
, p/ [0 N+ U# _: Fsyms a11 a12 a21 a22
0 s1 H% N5 ~5 y6 V. M6 [/ A& g1 _, }( w8 J* x6 D6 |* X
A=[a11 a12;a21 a22]
8 [+ b) d7 k0 }, p S* L" y7 ]/ l; }2 @ }0 y$ i+ g
就可以获得一个矩阵符号变量A。
( g9 _. t$ _4 b' {: t7 s6 g9 |$ A# n6 n6 X O( U
定义符号变量后,workspace中出现相应的变量名,图形不是数值变量的田字形,而是方框里有个立方体,双击后可以看到行列数。7 j/ g1 d; X/ \3 o* h5 D) N1 S
2 O c' [8 ?7 f
; ?3 W1 p. U7 n; h: z
L; ]0 C5 F1 C. g( _3.字符串
5 F3 z' T6 m+ a9 a+ V$ F& ?; {+ s* h% A9 K2 g4 |# i
比数值、符号更为简单的就是字符串了,其定义方法是以单引号开头和结尾,例如
) n* o o b, b
; `9 ~# m [8 w% R" C! Ka='hello world'
4 K' |; C: ^1 ?$ x9 T7 ^
0 h5 m+ D3 {% u- V7 U& Q) J7 }就定义了一个字符串a,其值为你好世界。matlab中较为特殊的是,字符串可视为行向量,例如2 m( o; j" o9 Y7 u9 W ~
7 a' Y# e) S, q+ J. [- b='hello '
- c='world'
- a=[b c]
( d e8 K5 ~" j: r
/ V e+ K$ Z: M
' d4 T7 w+ ~! u+ d( n1 |( a也可以获得字符串a,其值为你好世界。另外,有时也可以将字符串视为矩阵,例如% G4 _7 q9 m3 [& r8 i, `; `
. R) a' X$ C# d/ g/ E* g
a=['ab';'cd']
5 w: ?) r- M' s
* E4 \* {: Y# r* D* l5 t但这种用法很罕见,同时要求各行字符串长度一样,否则将违反矩阵行列数规定。
+ _7 z9 m8 ^- r/ U
: F& A! X7 {+ V+ h 当然字符串的值也可以是特殊符号,比如
- @% Y* _: x4 \; \' [+ }/ `% N1 X0 `# c; \- f7 K
" z, C3 m- y$ `. E- `就定义了逗号,而最特殊的就是定义单引号,因为单引号会和字符串定义中的单引号混淆,因此matlab中用两个单引号表示一个单引号,也就是* U, `8 x& M( I, r3 O' j8 m' D: }
2 P3 H3 H: j8 Q) K: |
- a=''''
# i. [/ W+ T# E6 Q/ K ; J8 x/ `. V; ~
表示a是一个字符变量,值是一个单引号。语句中第一和第四个单引号是字符串类型的开头和结尾,中间两个单引号用来表示一个单引号。
2 t- J3 K: t0 o- `+ W( B
5 T9 E2 n7 k' v7 |1 K 定义字符串变量后,workspace中出现相应的变量名,图像是方框里写了ch,双击后可以看到行列数。
$ l+ ~" q3 l: f: a/ y8 r0 m8 P" W' y" N3 _8 u; ~4 C9 M8 o
, t8 p+ y/ g/ m
* B4 A6 r$ i% T5 t- I; I
& O8 d! W, ]& b; j- q1 ^; F
, l' X9 d/ Y- p B2 K0 P2 i- s
; k# }* C! Y% B& d
) }$ _. t" X$ @* y3 r2 x% b+ A% U9 @* o# ~5 Y" P$ g
|
|