|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
! e S, C' J$ M. mmatlab解决问题的最基本思路是建立脚本文件,那么脚本文件的第一段就是定义一些变量,这和C语言等编程思想是一样的。matlab提供的变量类型很多,最基础的是三种:数值变量、符号变量、字符串,其他的类型还有cell、table等。这里仅说明最基础的变量类型。# ^3 x8 z% \6 H+ ?# b* K3 B* ]: {/ l3 E
& J$ @' A0 S- e* B1.数值变量' i; B I" ?# c+ I B4 o$ g& }5 n
matlab中所有的数值变量都是矩阵,赋值时,以方括号作为开头和结尾,以英文逗号或空格分割同行元素,以英文分号分割各列。例如在Command Window里输入
7 l4 Y6 }& v: `0 O- G+ @$ M- {( c" f$ ]& }
a=[1 2;3 4]7 s1 I* N5 z/ E+ U
0 Q! ^: X4 D& Q/ F# x
/ ^+ ?9 R; m0 C
( a$ e$ g" b3 e" b% |
6 }. g: w( M: t" m
可以看到运算结果,a是一个数值变量。同时workspace里出现一个田字形的变量a,说明变量a的类型是数值型。- r2 S6 k2 y1 D. b2 I* u, y
3 y) g$ z! y. _8 h2 [
1 J2 g, U% W9 m- f
3 Z+ h' ^! [, `7 F0 U7 S) ~向量和数字可以视为特殊的矩阵,例如
' Y' _. p) w) `; Y6 K/ w2 [ n- @
. `! d5 S3 s1 r- F! ga=[1 2]
9 v$ n' S$ h1 H
! r' K* m; k% x sa=[1;2]
5 ~8 N# _0 G# X1 J7 J
- W, B: z; i- o+ O分别是行向量和列向量。( s$ x8 s% [& w
4 s/ a' p" X! i
a=[1] 可以简写为a=1 是数字。' y8 a' }! l) K% l! k q
& ~) i, z. ~# A2 s; E% Z% q$ e 数值变量的命名要求是英文字母开头,不能包含特殊符号,大小写敏感。这里推荐采用下划线来进行分割,例如value_of_A,这和其他编程语言的命名规则大体相当。
2 F3 B" k( C4 G# d6 R8 C3 l6 J; `: c0 w; b' s4 g2 R- r
赋值中,有时需要用到等差数列,例如定义一个向量a=[1 2 3],如果比较长,赋值很麻烦,所以matlab提供了一个简单的方法
3 ^- B1 Q5 l6 p! M
1 r7 H& U- B: Va=[1:1:3]
: ^8 T/ p7 d2 f; k" K# N( o
2 K5 i+ P0 P% D" Z1 R这里两个冒号的意思是起始值:步长:终值。采用这种赋值方式时可以获得一个等差数列行向量,并可以省略两侧的方括号。当步长为1时,可以省略步长和一个冒号,于是可以简写为
7 ]% V+ ^& F: R3 A. P5 p) G6 Z: T" a1 G% e- x3 h. R+ z4 a9 t
7 n2 Y4 m3 @, {7 @. o# x. s
& F X8 G$ _6 |& M5 s+ K3 g: F3 j
# e7 A d* T' a% G8 S2 A9 d3 d& U' {
5 |' s+ i5 R6 n 另一种灵活的赋值方法是分块矩阵,其方法是变量名后面加圆括号,圆括号中加序号。例如
( f5 |) O* h. @3 E& v0 M3 A
$ I. Z% J/ @2 u$ a+ y: h! v1 Xa=[1 2;3 4] M) Z& R- |( v% v6 I3 g
' b7 [! Y, M& {; l' ?+ T7 o3 H定义变量a之后,
! {& H. Z8 ?: S1 K9 v1 z' B7 j. J$ Y
: R) H$ {9 Q6 D' Fb=a(1,2)
8 T1 X: g5 v! L# B* l
5 u/ l8 F. _1 \/ l2 `' V2 P就可以把a的第一行第二列元素赋值给b,当然也可以用
* Y# m# ?- G7 s% x" g. y% b6 w% | b+ N }; n4 b2 C
a(1,2)=10 E5 l4 p& }6 C8 u
+ j' B) F( S7 O7 R* t. e: `& v9 h
来修改矩阵中部分元素的值。这里需要注意,序号必须是自然数,且不能是零。当矩阵中有多个元素需要赋值时,可以将序号部分改成向量,例如
1 n" m7 e* i* C1 w% B2 |9 f( d9 R4 o" g4 U6 P! [2 J+ U
a([1 2],[1 2])=[1 2;3 4], x0 G$ S! H% l9 q$ m3 P
% ?% l" J: b) b, D5 W0 }
中把行数和列数都用向量表示,就是说对矩阵a的第1和2行,第1和2列,总共4个元素赋值。更进一步,也可以有a([1 2],1)表示a的第一列,也可以写成
+ L7 \0 d" W) H. e5 N/ aa(1:end,1)
* {! m4 p8 ~. I( f" E
8 m" @2 V- w0 f; K2 t这里的end表示终点,即a的行数2,也可以更进一步简写成! [! j6 T9 v) E# I7 i h
3 [2 i5 j+ m, m0 d4 }' K% P
a(:,1)7 K) i) F- j5 w- w5 e9 @
# d4 C; \9 D! ^1 b* r
这里的冒号表示从头至尾。这类赋值方法最为常用,但基本的语法非常简单,方括号表示矩阵开头和结尾,圆括号表示从矩阵中选取部分,把握这个原则,有利于读懂程序。# b$ m+ n& T( M0 p1 n2 H
) u9 \: k, b) v7 e
当然分块矩阵也可以% b* y! Q8 \* G- a3 S2 q. `# E
" a5 ~5 D, X# x; F/ c+ q4 sb=[a a]7 X7 F4 W' e P- t1 n2 u: v/ [" O/ ~
4 L& k" \8 L8 Q5 p
这样的赋值方法,但需要注意的是,方括号中的元素必须满足矩阵的行列数要求,例如
( Z) u i7 N0 y6 f* `- P7 Z
4 Z! h. K5 f, M2 _8 Y o' I" va=[1 1]- e2 s% a V7 T" w
6 u2 K* M8 k4 g' {/ ~
b=[1;1]
' k& g' N" u- s
4 h& z) d$ p3 d/ D: rc=[a b]
* A# w4 S, B, `0 k
6 \2 `- ?( {) ~% E& X- ]2 w就会引起错误,因为此时matlab无法确定c的行列数。
2 `) n9 ^ }, g# d0 E3 \0 F. F9 A( r7 F9 {1 _# L7 G2 v9 l' b9 ~
2.符号变量9 S e' S1 z: K- n4 q/ ~
' j* m" L" C! F. l$ h: m& F# T 总体而言,符号变量比数值变量简单得多,因为变化非常少,常用的赋值命令是/ h, f( n' T0 W K
: t8 L# E1 p Q2 r( A" |2 _
syms a b2 j! u! f# q& j0 g% z3 q5 S- X2 q0 U
5 L# {4 Y; R; v0 z msyms表示这里要定义一些符号变量,a和b是变量名,符号变量的命名规则和数值变量一样。有时候也采用$ O- l ^! Q, `8 \. A
4 Y( U7 C: k( e3 X& d0 t% E% z
syms a real
- M2 V6 ~8 {" {
" g; X( }5 z0 [8 a来强调a是实数变量,具体可以doc syms来获得帮助。
/ I) F7 C$ c4 o t" R+ A
# S. g2 o; |9 L& v 有些变量之间存在依赖关系,此时可以定义
/ u, w9 A" g7 Z+ l; i; m1 L, l' |8 b, m. H. n3 S; _1 ^2 X# V+ d
syms x y(x)( P2 B; E j0 a. W
1 c/ j/ r+ t6 Q' W' S7 U
这里声明x是一个符号变量,又声明y是一个符号变量,且y的值由x决定,这相当于数学中函数的概念。当然具体的函数关系并没有明确规定。也可以
( e5 @+ ?5 x# A4 z: N4 T9 ?- x$ K! E
syms x y z(x,y) r2 @- g9 U/ S: k# ?; O; X, [
+ _0 V6 ?$ V$ F/ X4 }
来定义符号变量z,z依赖x和y。这相当于二元函数的概念。这里的圆括号显然和数值变量中的圆括号含义完全不同,这也是学习matlab最不习惯的地方,同一个符号,由于变量类型不同会有完全不同的含义。所以在学习matlab的过程中,一定要区分数值变量和符号变量。+ e% v7 i; X/ d+ |5 G
" E& B% {0 j" H2 C4 r( F2 e# X' t: l2 Q: g+ o; F
上述方法定义的符号变量是一个数,或者1*1矩阵,matlab中也可以定义符号矩阵,例如
# O7 X7 N! Q N, t( X- i( k& n. X x, r- \0 k8 M
syms a11 a12 a21 a22
5 _( E: g( E* L4 _: ]: P5 L$ R6 |1 Y/ [* T
A=[a11 a12;a21 a22], T6 Z; f3 z- v- J+ z. h$ u! o. d
" B4 n }# G0 ]1 p# ]
就可以获得一个矩阵符号变量A。- x& p% a8 P7 Z% m
# N) _% b2 j. q. r2 k8 B' {. B' z 定义符号变量后,workspace中出现相应的变量名,图形不是数值变量的田字形,而是方框里有个立方体,双击后可以看到行列数。
" L. N2 c1 N) Z, o/ Y( d
. n( c; _+ b8 S8 Z# K& u
, y) Q& ^0 \: {: W; z8 K; t2 X$ g+ m7 j# D8 R
3.字符串4 g+ _- \& H& S' u6 w
# ~$ z* i& t; W5 O% y4 u. P: @ 比数值、符号更为简单的就是字符串了,其定义方法是以单引号开头和结尾,例如 i L$ E* Z- i0 a" k& `6 g2 F" E- W
6 {/ W/ m7 x" H- _2 e: T: {a='hello world'4 q8 V5 f# r. B) ]# }. Q
9 ]" j( @ ]$ Z4 t2 s
就定义了一个字符串a,其值为你好世界。matlab中较为特殊的是,字符串可视为行向量,例如
1 N- Y. r" h* t( Q6 L" |& |
3 `, A) y! l; }' l, b1 E/ N- b='hello '
- c='world'
- a=[b c]5 |7 e* P) B1 A! h
3 R6 L3 ?$ v. d! z
7 }+ R% r; h P) X
也可以获得字符串a,其值为你好世界。另外,有时也可以将字符串视为矩阵,例如
! z3 n3 N/ l) _0 e# ^. L
4 F) Q( Q3 z9 Q8 o6 A$ V# Ca=['ab';'cd']
7 v+ | I9 A1 q2 k: c6 _
2 |4 X L) b5 ?但这种用法很罕见,同时要求各行字符串长度一样,否则将违反矩阵行列数规定。9 A' F( o% ~. W5 L7 Y
8 z- C: W! j7 y* c$ Q 当然字符串的值也可以是特殊符号,比如
+ P9 ^' w& `% E8 _8 R
! g O7 W9 L3 N) ]- ',! P8 }/ c4 h; U& E% g2 r- {1 x
7 S2 g& \2 J2 q- }" t+ h8 e$ S8 e0 d就定义了逗号,而最特殊的就是定义单引号,因为单引号会和字符串定义中的单引号混淆,因此matlab中用两个单引号表示一个单引号,也就是9 w+ I" I, O* p* T- i- g
. Y" d# a. j' X9 g; ~9 g$ f- a=''''3 w( J! o* ~3 S" F( k) ]
1 x2 e" l" Y3 G. ?
表示a是一个字符变量,值是一个单引号。语句中第一和第四个单引号是字符串类型的开头和结尾,中间两个单引号用来表示一个单引号。
8 M0 `; b8 }( j7 B- H
* X1 P/ V9 ]/ N: x: I# S 定义字符串变量后,workspace中出现相应的变量名,图像是方框里写了ch,双击后可以看到行列数。- \$ K& x. P9 |. R9 Y k
; j6 M/ [. W N* r6 C5 x4 l; n
- Z, L- I1 `( Y/ O5 f- u) _
. E# f4 x& ]$ \9 ?' D
6 A8 [) b% l6 S7 ^2 J+ G1 a5 z# \; a
+ b6 V1 a# ]$ \! _4 p
4 p9 r9 Z( Y( |* o( r9 {( ?# E0 |. Y+ |+ ]2 G" [) B
|
|