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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

& Y+ i& F  o2 W* f! X$ pmatlab解决问题的最基本思路是建立脚本文件,那么脚本文件的第一段就是定义一些变量,这和C语言等编程思想是一样的。matlab提供的变量类型很多,最基础的是三种:数值变量、符号变量、字符串,其他的类型还有cell、table等。这里仅说明最基础的变量类型。% N  C3 d0 K$ v- V! f! U) C

' C  ^; I, P3 u$ u, F3 u) M  X1.数值变量

1 B) Z4 A/ b3 I" C; \" ?* P    matlab中所有的数值变量都是矩阵,赋值时,以方括号作为开头和结尾,以英文逗号或空格分割同行元素,以英文分号分割各列。例如在Command Window里输入
$ Z! |* ^& D1 T
2 J1 Y3 _1 |9 x" V5 {5 k: H; l- Ja=[1 2;3 4]

$ \/ \  @" e6 p/ K/ f  J6 @+ r9 b4 i3 ~) A1 G0 d3 f8 K
1 @& h8 n5 D& [8 z# B

4 y. t) C8 @9 t  f; m
7 b( r, Z4 A3 K' ^" c/ _/ R) [可以看到运算结果,a是一个数值变量。同时workspace里出现一个田字形的变量a,说明变量a的类型是数值型。* l1 S2 ?$ m! {' N" O
6 ]) m5 s( j4 j  Y

, |7 A, \- D9 L4 U5 u  A  {2 R: l# Z
向量和数字可以视为特殊的矩阵,例如* H+ s- w; W7 Y, F* S
% d9 \" r9 V) p5 Z) J. T. Q
a=[1 2] , l. ^8 z$ U  k
. J+ w4 F0 [' V
a=[1;2]
, c/ D4 Y6 f- v/ M+ {7 o* \; E! U
7 x8 f* h2 w) Y9 K$ _% u分别是行向量和列向量。8 V# C# |. r  K
6 D& z5 i  a4 Q& B7 x
a=[1]  可以简写为a=1   是数字。

1 V8 x# ?# P2 M3 E5 O& X9 H
( ^$ w: v' Y2 o4 y3 C    数值变量的命名要求是英文字母开头,不能包含特殊符号,大小写敏感。这里推荐采用下划线来进行分割,例如value_of_A,这和其他编程语言的命名规则大体相当。
9 L  `9 n+ |; I) K2 o6 o$ s* f) G

. M; O. K% E' L" x  I. r; U. k    赋值中,有时需要用到等差数列,例如定义一个向量a=[1 2 3],如果比较长,赋值很麻烦,所以matlab提供了一个简单的方法6 ]- n' O# C) v) p: ?, i

# T' A- i5 S5 k" q0 va=[1:1:3]
: x$ {: y- D5 K8 f
# X7 Z/ r* k3 D( V0 h! E- Q6 r: Q这里两个冒号的意思是起始值:步长:终值。采用这种赋值方式时可以获得一个等差数列行向量,并可以省略两侧的方括号。当步长为1时,可以省略步长和一个冒号,于是可以简写为; ~* i  ^/ _: i' |# C9 V
, b; B) R+ `9 I! M+ o( d
  • a=1:3
    # }' M9 o% ]: p8 T6 N" I

, r" v* |: c8 a/ u  R% U# }

* G- _+ a; [% i* b4 J6 g$ W% }7 t5 j

/ I9 Y' q5 `: C3 y2 L' Y; u6 g, `( p2 B0 v
    另一种灵活的赋值方法是分块矩阵,其方法是变量名后面加圆括号,圆括号中加序号。例如6 l4 L$ z4 ?+ B" s6 [6 g: v9 U: i

: X$ e' r% T& f1 c9 N6 Va=[1 2;3 4]3 R: Z; z  X( q

1 c( B) }2 j  J" J& j5 ^! l# H5 A定义变量a之后,
( U, i4 L$ L2 b* `: s- ]  a/ [0 ]5 S1 M5 Q+ s
b=a(1,2)) u- `/ P6 h) B. P5 G0 h

5 R. X$ Q2 c7 m( }就可以把a的第一行第二列元素赋值给b,当然也可以用1 n$ ^3 ]" L2 d! `$ ~' I8 W$ @

  E/ s/ g  g  W9 x: D9 f5 na(1,2)=10 u/ R& W! \$ c0 e
( e5 @8 ^: P: n9 f
来修改矩阵中部分元素的值。这里需要注意,序号必须是自然数,且不能是零。当矩阵中有多个元素需要赋值时,可以将序号部分改成向量,例如" f3 X. \! x+ M3 n8 H0 x

& M' i, I4 H* s# C( F" }- c7 N5 ea([1 2],[1 2])=[1 2;3 4]
: c, e) Q1 f& m
/ f9 c' I, [- f( t8 P! h中把行数和列数都用向量表示,就是说对矩阵a的第1和2行,第1和2列,总共4个元素赋值。更进一步,也可以有a([1 2],1)表示a的第一列,也可以写成
4 M+ _% t+ G8 ~1 {- ma(1:end,1)
/ G4 Q7 M1 k4 x' k) o! `" Z
4 [' z+ J" a; y6 [. V- S6 u这里的end表示终点,即a的行数2,也可以更进一步简写成2 Q0 u& K+ ~' @% S  ~4 n

+ k$ M) ~* W. W6 |& r8 pa(:,1)
) H  M/ Q/ I2 @. R5 K, _# G1 g; N, J
" I& m3 H$ Q, W3 }$ l2 t: ]& p8 H" ?这里的冒号表示从头至尾。这类赋值方法最为常用,但基本的语法非常简单,方括号表示矩阵开头和结尾,圆括号表示从矩阵中选取部分,把握这个原则,有利于读懂程序。
7 U9 k' a+ D) L2 |. A7 R9 u

+ x5 o4 a, P1 ~  H* I% r) A    当然分块矩阵也可以: Q+ }+ e& y& w$ r8 l7 `* Q' m

9 O, ]0 C0 Y$ Q% F: ?7 Cb=[a a]( J+ e2 p- f- e- Q: R6 `1 Y

  c! Q+ S9 |: }- [  s这样的赋值方法,但需要注意的是,方括号中的元素必须满足矩阵的行列数要求,例如
: l, ]) D' M  `6 \3 H  l( R5 C7 g  T$ C. q6 ~( [# N. U7 X
a=[1 1]" C0 P& g5 Q8 p3 E9 c" ~& L
& a( [  _; T* `% A2 X; Z# p
b=[1;1]
1 V; y) H: Z/ w
7 k7 Z% q; C/ E6 s6 vc=[a b]
; _: G' _' T7 H2 P! R# U* w/ K
; h8 U/ b: G7 u5 {. I& x9 m就会引起错误,因为此时matlab无法确定c的行列数。

5 V+ L7 M# Q8 v$ H8 Y1 [) N7 o/ J# E; n* O
3 V! q; y3 G/ d2.符号变量
$ ^; u9 S0 ], q! h' b
+ x0 F2 ~; B( d; N  A4 w- z# p9 [
    总体而言,符号变量比数值变量简单得多,因为变化非常少,常用的赋值命令是: L: A+ K  l2 H
- N. S' P$ b1 Z" e8 N% ?2 u" l. ^
syms a b& @9 r  v" }- i& ]0 v! p

' x' o- g5 y* E- B$ p) Isyms表示这里要定义一些符号变量,a和b是变量名,符号变量的命名规则和数值变量一样。有时候也采用- L% r( M+ m, k3 H- i/ q0 K

8 A( y9 }( k( z* D1 P7 Rsyms a real8 G4 p; K( r2 M9 ^

" }* n' v7 P7 Z: w& O5 `  k来强调a是实数变量,具体可以doc syms来获得帮助。

* S( ]2 c6 @4 O2 ]  [5 J" E$ |4 Z# Z/ `" N6 |9 ?9 Q9 s, V
    有些变量之间存在依赖关系,此时可以定义
& m0 ]) j2 G* E4 ], F% Z* w0 o# j/ K$ l" r! Z! v1 D
syms x y(x)9 M! V, d, J- o, s2 `, i! W
( v2 z9 i, z2 g: v/ f
这里声明x是一个符号变量,又声明y是一个符号变量,且y的值由x决定,这相当于数学中函数的概念。当然具体的函数关系并没有明确规定。也可以
7 E; j- m, c- P$ O+ A2 P
9 D$ Y+ P' L% K; l! J& L+ Rsyms x y z(x,y)& G1 I& Z9 _$ |0 Q
6 R6 C) _: x% d- D
来定义符号变量z,z依赖x和y。这相当于二元函数的概念。这里的圆括号显然和数值变量中的圆括号含义完全不同,这也是学习matlab最不习惯的地方,同一个符号,由于变量类型不同会有完全不同的含义。所以在学习matlab的过程中,一定要区分数值变量和符号变量。
5 J! G- ?6 \2 x2 v5 z; L9 a6 V* |$ n. x8 K$ I
3 l. m' H8 W% N0 O0 v/ \
    上述方法定义的符号变量是一个数,或者1*1矩阵,matlab中也可以定义符号矩阵,例如
( g, J8 I& ]4 ]/ V! }
% ]* E" B* R/ hsyms a11 a12 a21 a22
9 u8 }+ Q0 y  X$ o9 A6 a, r3 D' ]7 i/ c/ _5 ], F8 M6 J
A=[a11 a12;a21 a22]
! l" ~8 G  F1 ?8 X! K2 {
( ]. g) L" D/ J" t- M就可以获得一个矩阵符号变量A。
* w/ o) i1 q0 }: z1 y% L

5 a, P  f8 c4 O4 ~4 X* c6 |  定义符号变量后,workspace中出现相应的变量名,图形不是数值变量的田字形,而是方框里有个立方体,双击后可以看到行列数。& n% D. Z0 N* y8 A% p! }

% [; k/ m' F' A# L
& G+ S1 p) O" H
; a) o' ?, I4 f  h: p2 g
3.字符串

; U; D7 N( R* v2 b
5 `- q& Z- ?' o& e% e5 Z: T" `6 S7 o    比数值、符号更为简单的就是字符串了,其定义方法是以单引号开头和结尾,例如- X5 B  {% N! V

6 p" u& [( v4 o: W8 c, Ca='hello world'
  K( `) G+ ~+ [+ q! }  S1 n9 T- r' B( f
就定义了一个字符串a,其值为你好世界。matlab中较为特殊的是,字符串可视为行向量,例如4 ^$ G, U8 @( E  A4 u
; I! `( [0 b/ K
  • b='hello '
  • c='world'
  • a=[b c]  t  b7 l+ o" Z4 l% u

' m  C) P$ P' @7 s  J) M0 I5 Q2 b9 u; r+ P  A: P% y1 A) m
也可以获得字符串a,其值为你好世界。另外,有时也可以将字符串视为矩阵,例如
- Z9 K' D: n% }7 r# ]
0 ?" g, n. F: S7 q6 K5 ?a=['ab';'cd']3 H6 [: A( v" ~& h/ F' _; k" i. s6 _

9 i0 }8 P) ?+ U9 E8 l' G( f2 h1 R但这种用法很罕见,同时要求各行字符串长度一样,否则将违反矩阵行列数规定。

) @' N! N7 z" ~% H# p1 d3 n1 C7 u- p  m
    当然字符串的值也可以是特殊符号,比如
% b  v2 q, F7 n4 G. a4 G2 {9 G, V
% L0 `6 `4 h. E! B
  • ',6 N7 \; n+ `0 N4 O" X, w1 d0 o& e: X

! b1 h! F& n1 J1 w! O9 f就定义了逗号,而最特殊的就是定义单引号,因为单引号会和字符串定义中的单引号混淆,因此matlab中用两个单引号表示一个单引号,也就是
6 S9 D) |- V! z/ u
" x+ A9 f0 g% b& Z& W
  • a=''''
    $ {4 [- T8 a! N9 V
, Z6 l' M6 }) l  ^! I8 u: f. v
表示a是一个字符变量,值是一个单引号。语句中第一和第四个单引号是字符串类型的开头和结尾,中间两个单引号用来表示一个单引号。

( z+ P! f, l  x  J& z
3 @7 {+ `  L- H    定义字符串变量后,workspace中出现相应的变量名,图像是方框里写了ch,双击后可以看到行列数。
& t! I9 [: f0 b
) P/ h8 Z7 M2 T: ~+ i, Q; \
# c" z4 L3 Q) m, p

4 {3 g' W2 w  ]) ]2 b4 G$ x" ]7 r( V& I7 v2 m0 b
3 }2 u, U( P7 z) O9 X) E9 W
5 \* m1 ~/ L: g9 i

* O+ D! J! \  t$ i$ }# z# D: @* E: {% y9 p9 ?6 T7 E2 p  v5 b0 G
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-24 00:44 , Processed in 0.171875 second(s), 26 queries , Gzip On.

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

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

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