|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
& l" |/ U) n9 L" n- P
matlab解决问题的最基本思路是建立脚本文件,那么脚本文件的第一段就是定义一些变量,这和C语言等编程思想是一样的。matlab提供的变量类型很多,最基础的是三种:数值变量、符号变量、字符串,其他的类型还有cell、table等。这里仅说明最基础的变量类型。. ?, q! q4 D( i4 s" z
% n! t4 d9 r `+ ]; A/ J
1.数值变量
. {3 Q- p9 l- D& P matlab中所有的数值变量都是矩阵,赋值时,以方括号作为开头和结尾,以英文逗号或空格分割同行元素,以英文分号分割各列。例如在Command Window里输入
3 ], @: H; H+ j0 z
+ s/ ], w& e% m1 z1 B% P+ R! k. ga=[1 2;3 4]5 {( z5 q2 L3 P$ j( D* y. O+ @
/ \3 o8 S3 K) S- r1 E9 D; | L
% g' w+ N! E3 S! C
+ N! `: @& V+ ?$ V1 Y
1 ~- Q6 }+ ~+ @& ]可以看到运算结果,a是一个数值变量。同时workspace里出现一个田字形的变量a,说明变量a的类型是数值型。) p$ r6 ]4 V9 y4 s- z
/ a8 V* Z; @7 _4 _" x
9 |1 S) k6 ^1 Y2 M1 E
4 ^; E6 ~* |: O7 i向量和数字可以视为特殊的矩阵,例如+ i) Q- q3 o1 Y2 I Z% \, v
" D( S- ]8 r8 P( |$ k3 @
a=[1 2]
. Y" i9 l( H3 V! ~6 h+ O. o& [- o O3 A4 R- `. x
a=[1;2]
{$ B | W9 J8 A6 t0 {1 l8 w* r; N/ o( k' c
分别是行向量和列向量。
' N, j: E1 ~: G* V
1 ` K) W2 Q% ?. ga=[1] 可以简写为a=1 是数字。
+ l9 Z" r @0 Z4 W% E
+ \( ` D$ K P6 P0 K' R 数值变量的命名要求是英文字母开头,不能包含特殊符号,大小写敏感。这里推荐采用下划线来进行分割,例如value_of_A,这和其他编程语言的命名规则大体相当。. l; {0 A/ P+ v z7 m8 ^9 c5 f
5 v& B+ ^+ n! o( z1 M9 C
赋值中,有时需要用到等差数列,例如定义一个向量a=[1 2 3],如果比较长,赋值很麻烦,所以matlab提供了一个简单的方法
, h( F; D2 O2 l. ~$ c& o) K, x) @* B. @- A
a=[1:1:3]! t* X6 k" V* S0 g9 [8 O
2 K" O6 S: L- L+ G# b) D# i这里两个冒号的意思是起始值:步长:终值。采用这种赋值方式时可以获得一个等差数列行向量,并可以省略两侧的方括号。当步长为1时,可以省略步长和一个冒号,于是可以简写为/ T w: p$ ?' L8 X
9 \; q5 ]2 ]# p4 J6 T- a=1:3
. R: J) H9 S% Z$ G$ w8 R , N- j* H1 w! i& O; v
- G/ w# x! J$ Y9 T$ @: R5 l
7 D. z6 s7 ]7 f9 U: ^' j5 S6 s
7 i3 p: N6 S2 I+ y% _5 ` 另一种灵活的赋值方法是分块矩阵,其方法是变量名后面加圆括号,圆括号中加序号。例如1 y! i: c3 D9 l# r
* s6 r% F7 S7 i1 m
a=[1 2;3 4]
6 |$ ^# G: u5 h" Q
/ A: c6 h$ d( P0 |, w6 B定义变量a之后,
: @ x1 m' ]! {% b) i
5 _2 \8 y' h# a: k8 Kb=a(1,2)1 }( i3 m8 g u
1 J5 F, y& p, d) i' ?就可以把a的第一行第二列元素赋值给b,当然也可以用
3 M: q2 n7 G" e5 B) q
" o& v( i* |" q' N |9 J2 ta(1,2)=13 U) a1 [0 L: s# P7 f9 Z
* }& n6 ?. }2 M7 u5 K来修改矩阵中部分元素的值。这里需要注意,序号必须是自然数,且不能是零。当矩阵中有多个元素需要赋值时,可以将序号部分改成向量,例如
( P6 Q" t0 E: Y
$ U: J3 n7 ^+ o0 j) r4 y+ ~a([1 2],[1 2])=[1 2;3 4]
8 y0 Z, g" V4 R j* B) A- Z3 n3 }' x3 L, ^8 p
中把行数和列数都用向量表示,就是说对矩阵a的第1和2行,第1和2列,总共4个元素赋值。更进一步,也可以有a([1 2],1)表示a的第一列,也可以写成6 A) h2 \7 }% S- }: y" ]1 P
a(1:end,1)$ o4 J! u0 j: E3 ]/ C2 c7 W7 N& `
* R) Y9 W! F4 b) T1 M1 u9 j
这里的end表示终点,即a的行数2,也可以更进一步简写成) D& B6 p! r: C
# d' [5 L9 b. b. o% c$ S
a(:,1)
/ R1 H' P$ t; F; B% a
& X. J' l5 V( y Z6 ~( e这里的冒号表示从头至尾。这类赋值方法最为常用,但基本的语法非常简单,方括号表示矩阵开头和结尾,圆括号表示从矩阵中选取部分,把握这个原则,有利于读懂程序。
: t8 W; e, o& }2 C8 B+ u" ?# G5 d( K4 Q% U2 m% [
当然分块矩阵也可以
- l2 ^; U6 v) j3 x
8 z4 T( ], ]. D( q" _4 ~0 e2 Cb=[a a]4 z% H2 d$ {/ `* `/ T, u
7 d! U7 b8 D5 N# j1 {这样的赋值方法,但需要注意的是,方括号中的元素必须满足矩阵的行列数要求,例如6 T. |: D' ~' @5 t K6 H) w& a
+ w9 F& i5 }- i9 K) P& {
a=[1 1]+ @% k( W2 n& j
; q4 y/ ?4 o0 w$ @- l5 z8 wb=[1;1]# ]$ A+ ^ L, c4 h4 }/ c1 t
6 W5 j3 o" |/ [: v1 g: E0 D
c=[a b]( H$ h2 Z0 z) }+ s& ?* ~
8 @+ A# |2 f5 K
就会引起错误,因为此时matlab无法确定c的行列数。
4 I8 _" @5 k5 m$ N2 g! I$ l0 E q( j" d( |5 Y8 i9 p/ c
2.符号变量
. i8 A9 x, S: y' l- K5 T2 s" z4 A( ^7 M# _8 d [
总体而言,符号变量比数值变量简单得多,因为变化非常少,常用的赋值命令是
, u5 \- h- @" ], p4 u" |9 R0 v1 A3 K& F- J* q
syms a b
4 D7 {0 y9 P; U/ W0 P9 K2 I
4 W! \; Q5 I9 t( C* C2 b2 Ksyms表示这里要定义一些符号变量,a和b是变量名,符号变量的命名规则和数值变量一样。有时候也采用
" L# F! y' G& l" ^
7 `; a! V1 f6 @0 ` }) k% zsyms a real
; }7 l3 z3 W8 M* ]
- k2 i: {2 d- [' @6 y! s T来强调a是实数变量,具体可以doc syms来获得帮助。8 ^- C0 Q9 a: t F6 V! J
; t# t' T; ~0 r 有些变量之间存在依赖关系,此时可以定义
& ]- r, P) d7 p, O# l3 Z$ b" J; S$ t- C
syms x y(x)
: E# R* N) E0 O! ]$ z+ C
- a7 H1 ^+ Y- B3 G$ [0 r$ p这里声明x是一个符号变量,又声明y是一个符号变量,且y的值由x决定,这相当于数学中函数的概念。当然具体的函数关系并没有明确规定。也可以! v* S1 O$ b4 S- ~
$ f9 X" S5 T' G; E: d5 ^+ z0 Psyms x y z(x,y); m" C2 W3 ^( s& G, _' J
1 Z; s) \( ~; t6 b2 b5 b) ^3 Y
来定义符号变量z,z依赖x和y。这相当于二元函数的概念。这里的圆括号显然和数值变量中的圆括号含义完全不同,这也是学习matlab最不习惯的地方,同一个符号,由于变量类型不同会有完全不同的含义。所以在学习matlab的过程中,一定要区分数值变量和符号变量。
0 X M1 d. c2 S- _% w& a
) ?; o1 \: N1 C, j7 h4 }0 ^4 y$ R* i, i. U8 ?8 \/ w
上述方法定义的符号变量是一个数,或者1*1矩阵,matlab中也可以定义符号矩阵,例如$ D, T, w: D) i# t5 K
, n/ J7 Y" X4 s7 j* q- a3 s# R
syms a11 a12 a21 a22
& g6 A$ j8 P% {. j& C+ T/ ^
. n. b6 p& S% \3 vA=[a11 a12;a21 a22]
$ r9 }' _5 u& a- m R
$ T$ }6 k: t8 J o) \- ~+ S就可以获得一个矩阵符号变量A。
9 @7 k$ E( x0 @) r5 K) N
2 S7 D8 N6 l+ g0 k, p$ o" _ j 定义符号变量后,workspace中出现相应的变量名,图形不是数值变量的田字形,而是方框里有个立方体,双击后可以看到行列数。
4 P, F* W, v- K. g9 L4 D; I7 [# k' o1 C
7 b! T- Q( A* l3 I/ m$ w5 t. `: O$ K/ j. Z9 n7 n0 x8 Y/ y: g) E
3.字符串
+ S! f+ t' B7 C r) v/ v+ x3 n' N2 S( c5 y7 W! J+ I
比数值、符号更为简单的就是字符串了,其定义方法是以单引号开头和结尾,例如
. J O8 `3 K" ?8 R8 y6 `& ? u1 n( Q* j( h2 C( F$ l
a='hello world'
" b% ]2 H* E. s$ v- o/ P7 N% N* ~9 p4 g$ X: X( g) \' x6 d* t7 w
就定义了一个字符串a,其值为你好世界。matlab中较为特殊的是,字符串可视为行向量,例如
; ^5 B/ E! x9 J: r$ _- d/ i0 g: \9 T
- b='hello '
- c='world'
- a=[b c]* t3 I. s& w7 ~8 P. H' v
" |6 ~& ~5 B e* \
$ e! O7 N8 ~2 B( O( H# i& Q% Y! B
也可以获得字符串a,其值为你好世界。另外,有时也可以将字符串视为矩阵,例如' ]" o1 k2 R$ S% W
6 @. h5 `, {# M- Y2 Ka=['ab';'cd']
& e; s+ d' K5 k/ M! {
9 o% U( A& b. J但这种用法很罕见,同时要求各行字符串长度一样,否则将违反矩阵行列数规定。* g5 L+ m! N% Y/ [& I5 r" a
& p2 E8 P% q# j+ N
当然字符串的值也可以是特殊符号,比如
' A0 i$ {: ~- V* L' `. d7 R8 J% N* v) h$ t: D9 f5 r
% g- _( s1 p0 h* A" B- N s
就定义了逗号,而最特殊的就是定义单引号,因为单引号会和字符串定义中的单引号混淆,因此matlab中用两个单引号表示一个单引号,也就是
4 S( I* m1 t3 b. X$ T! q s, P/ o' J& K0 @1 ?3 b
& T. b: l3 | S1 x$ w: N* o- e5 r表示a是一个字符变量,值是一个单引号。语句中第一和第四个单引号是字符串类型的开头和结尾,中间两个单引号用来表示一个单引号。/ m5 p# L0 E% p1 ?6 f: M1 Z( `! `
% q. `! v& s- K+ g( r
定义字符串变量后,workspace中出现相应的变量名,图像是方框里写了ch,双击后可以看到行列数。
6 s$ g, e- z& @4 Q8 v& J2 l2 b/ j/ F) J8 V, z I: X
2 u" Y6 E) ?# R/ p: l
$ t; D% S$ V8 i
; o9 v7 g( x. J9 }# G8 X1 k+ l2 m7 A9 k4 u
7 ~ Y* A8 s+ N! \" C6 W9 r, Q& x; N
2 x1 P* M( ]4 w7 o4 S& G/ h) I. q |
|