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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

7 U' _8 u- A4 G. L, [matlab解决问题的最基本思路是建立脚本文件,那么脚本文件的第一段就是定义一些变量,这和C语言等编程思想是一样的。matlab提供的变量类型很多,最基础的是三种:数值变量、符号变量、字符串,其他的类型还有cell、table等。这里仅说明最基础的变量类型。
  [5 t% ~6 |8 A2 H- Y; j1 _  `0 I6 N  R% v5 b6 K- w  X5 F
1.数值变量

$ |3 N2 e0 B; f4 Y' T6 ?# W    matlab中所有的数值变量都是矩阵,赋值时,以方括号作为开头和结尾,以英文逗号或空格分割同行元素,以英文分号分割各列。例如在Command Window里输入" ?1 T  D* x) b% M; A, U
  `- v: W% h5 Q
a=[1 2;3 4]

) c6 E8 b* \: r' D) ?* S+ d, x- T
6 Y9 F* h% I0 k* I# W4 Q( T7 R4 ?  H
4 a& L5 Z2 D1 V8 s
3 V- o3 P3 A" ^* H  V8 C

" r2 `1 `  m9 O/ ~* h; l可以看到运算结果,a是一个数值变量。同时workspace里出现一个田字形的变量a,说明变量a的类型是数值型。# }9 T% P# Q  }
! h) n& Y6 J6 e3 T/ Q
0 f8 ?$ a8 w/ Q. o. w
9 i. y! [0 X5 w: l( e
向量和数字可以视为特殊的矩阵,例如$ v5 E2 D& C+ K7 _* ~; z
0 [1 y7 \+ z- R6 m4 C
a=[1 2]
9 D! J% i4 w& C( N. B2 e) |! I2 ?  X/ C9 q* Q- H
a=[1;2]
0 d- v' j  @( L) f+ g+ P& {9 c) r& D7 N1 U
分别是行向量和列向量。
& Z3 t" @' ?4 K0 a; |, a; X! c, ~6 u8 W! }& i2 p
a=[1]  可以简写为a=1   是数字。

9 C, K8 X; S$ a. ?/ p9 g" f, @
    数值变量的命名要求是英文字母开头,不能包含特殊符号,大小写敏感。这里推荐采用下划线来进行分割,例如value_of_A,这和其他编程语言的命名规则大体相当。
0 G$ o) F( o: f3 L
/ m0 i+ k2 H. \7 L9 n
    赋值中,有时需要用到等差数列,例如定义一个向量a=[1 2 3],如果比较长,赋值很麻烦,所以matlab提供了一个简单的方法# X* o: X# u+ L0 ]" D  b

& j+ S2 T& W# Z- Q# fa=[1:1:3]/ T2 Q# t: ~6 l& [, w

! d8 ~0 l4 O2 P9 m- L, s这里两个冒号的意思是起始值:步长:终值。采用这种赋值方式时可以获得一个等差数列行向量,并可以省略两侧的方括号。当步长为1时,可以省略步长和一个冒号,于是可以简写为1 x1 ]. g3 J2 @2 I6 K1 Q

1 p2 m" y9 h9 N* x+ q7 h, M- E
  • a=1:3
    2 ?& y$ l8 X  _& n3 P' E! o, k
" c( w9 O$ E& Z4 K' ^' x0 N
, u6 W+ \/ H+ ^/ W' N4 B) n
. F1 J/ h/ k2 x5 P" `9 s: a( ^

1 _7 x4 m* o! v9 {    另一种灵活的赋值方法是分块矩阵,其方法是变量名后面加圆括号,圆括号中加序号。例如% z( b3 f. T1 V$ Z! ]: ?
7 ~: a( B: f1 A& _1 D8 V; o! h3 w
a=[1 2;3 4]
3 h  ?3 i' x7 D+ J1 R/ Q; I
; q& s; I9 g! g* w定义变量a之后,
) g0 ~  l0 u) M9 v; e1 H' g
6 m# ?! A7 p& Nb=a(1,2)
, Q) j% Y" g5 {7 j! V% k$ W9 F- Q, W0 M  u; s8 I- \# B
就可以把a的第一行第二列元素赋值给b,当然也可以用8 A: {2 e9 ^3 S& V8 k
* X) Q1 L* ~& B7 O
a(1,2)=1! B% S/ r' d: q" ^: L( A; I! S
* m: I. v% t' K( [# ]; i- H& x
来修改矩阵中部分元素的值。这里需要注意,序号必须是自然数,且不能是零。当矩阵中有多个元素需要赋值时,可以将序号部分改成向量,例如+ F. k  I+ }; ]1 C, @' |

% w+ G2 P* T: ^- {a([1 2],[1 2])=[1 2;3 4]
; L  x( I! t; ]" S$ B% R1 j- I9 y$ P8 d% ~3 Y; z  i
中把行数和列数都用向量表示,就是说对矩阵a的第1和2行,第1和2列,总共4个元素赋值。更进一步,也可以有a([1 2],1)表示a的第一列,也可以写成
$ g6 |- T7 L! p8 Ma(1:end,1)
1 {! L! G( s0 q1 N% O- o3 X' |
$ j; G0 ^: N$ w, U8 L这里的end表示终点,即a的行数2,也可以更进一步简写成
; F8 A/ `: O$ F0 `1 A
3 q. G- }6 Q' I, d& ^a(:,1)- T! Q7 O7 `# V* y! ~* F8 u- w

9 a) ]8 [" G+ Y* d, j. g  q这里的冒号表示从头至尾。这类赋值方法最为常用,但基本的语法非常简单,方括号表示矩阵开头和结尾,圆括号表示从矩阵中选取部分,把握这个原则,有利于读懂程序。

" r1 s2 z' Z8 i5 W
* P0 |; L/ Y/ l; V    当然分块矩阵也可以5 z0 f* I) t( ^

' o/ x. m( X3 w2 T3 y% A; ?9 qb=[a a]
* i. Q; F8 L: L. p, U# `( M' J6 K! M
这样的赋值方法,但需要注意的是,方括号中的元素必须满足矩阵的行列数要求,例如/ V* c: J( ~5 q6 ~" U4 G/ P
  l) A6 U5 l+ ]4 n: D1 {9 o+ H
a=[1 1]
( g: K% s( k: B. V- i) f! W. l& i  `8 p
b=[1;1]( d, V/ Y) v7 J' F7 b8 K
; f# R' a7 d+ f
c=[a b]
$ I4 i' O7 C- ?# G7 t
1 X. h6 f7 @8 M8 t3 ^3 a  z$ s) |就会引起错误,因为此时matlab无法确定c的行列数。
+ k  J  e: w! z  [8 Z, d2 b9 k: E

9 }  C% z4 e# B2.符号变量

1 |7 e# t- g( Y8 Y* k/ I0 q: a
    总体而言,符号变量比数值变量简单得多,因为变化非常少,常用的赋值命令是! l2 W. M+ Q9 \( Y! L

; H+ g/ p. g3 S& Isyms a b' a# J+ p# S8 \; f5 o4 ]" u
) s+ Y* e8 r/ M, t# K
syms表示这里要定义一些符号变量,a和b是变量名,符号变量的命名规则和数值变量一样。有时候也采用
; T1 H. d/ q1 Y# r+ L5 s/ {3 P, r. _
syms a real
+ N/ _/ r* @. l1 l$ K0 s4 q; b! B9 h  M# v0 _' ]8 X
来强调a是实数变量,具体可以doc syms来获得帮助。

: B9 E8 {$ f& ?1 m* ?3 \3 F4 u" ~, c2 ]
    有些变量之间存在依赖关系,此时可以定义% o. ?4 V+ c/ c8 E- t2 i( y
; I! [/ a: l/ u, m
syms x y(x)
" Z1 z* Q" B( U7 s, r% y
, N3 G( R& K4 _, G9 u这里声明x是一个符号变量,又声明y是一个符号变量,且y的值由x决定,这相当于数学中函数的概念。当然具体的函数关系并没有明确规定。也可以+ r. g. Y+ F. y; e
- b4 `. W. b) y  j; s3 R* _
syms x y z(x,y)
+ i# T5 b6 l8 A: t) r$ `  U) f: \( ]5 Y
来定义符号变量z,z依赖x和y。这相当于二元函数的概念。这里的圆括号显然和数值变量中的圆括号含义完全不同,这也是学习matlab最不习惯的地方,同一个符号,由于变量类型不同会有完全不同的含义。所以在学习matlab的过程中,一定要区分数值变量和符号变量。
: l  g, V) s% K3 u" y; r
" t8 D. B4 k4 _/ x
, g* ]; O( r3 `+ g6 ^7 c
    上述方法定义的符号变量是一个数,或者1*1矩阵,matlab中也可以定义符号矩阵,例如1 B+ h: I. e, W9 c' M1 o$ v
, q8 ~8 w& c9 s, b9 Y5 z( ~
syms a11 a12 a21 a228 H' E. i' _! T! q+ Z
! Q8 [% _% G- a- M  X! v8 U; Q! S
A=[a11 a12;a21 a22]( a. d& ^, M7 U8 Q
* L# O( @, A+ \* w- v, ^7 _
就可以获得一个矩阵符号变量A。

: c7 {) \. ^2 j3 b  j( ?2 X) z& d9 O
  定义符号变量后,workspace中出现相应的变量名,图形不是数值变量的田字形,而是方框里有个立方体,双击后可以看到行列数。
7 H0 Y8 G0 m; @- J: A8 h" u! g, i' \. G* r
" G4 L5 V  E9 ?9 V' b
* D5 s6 f8 L- Q' d2 R$ m) W8 }  Z
3.字符串
5 {) I2 s+ v& g- K6 V& V2 u9 U7 \
0 x$ t( H, r  }% e; S% y) {# {" G7 \5 G
    比数值、符号更为简单的就是字符串了,其定义方法是以单引号开头和结尾,例如
% w/ b( R- `; m. j* k0 y+ T2 R6 A$ H6 f' g2 J6 J! N; Z! \
a='hello world'# M8 L8 L! L6 E
/ u  F2 v0 W% d" N* O& u: E0 [8 f9 y% z* w
就定义了一个字符串a,其值为你好世界。matlab中较为特殊的是,字符串可视为行向量,例如4 I1 l  j" k9 i8 G& {
# x- A+ @8 ]) n$ z$ i
  • b='hello '
  • c='world'
  • a=[b c]
      ?9 j, S) r( J5 m" _
/ h( f0 L9 m* O# ?
! H1 R+ k. R" ?3 Z
也可以获得字符串a,其值为你好世界。另外,有时也可以将字符串视为矩阵,例如) s$ D6 |. {& Y" B

" @8 n* q& S7 k( R3 ?a=['ab';'cd']
" j1 r& o% v$ }1 V, s  ]* }: P. h, X, E7 T
但这种用法很罕见,同时要求各行字符串长度一样,否则将违反矩阵行列数规定。

( L4 x$ k6 W. J- ?- d3 m3 r
& @$ k4 }/ Z$ M( s. [, d8 N    当然字符串的值也可以是特殊符号,比如) @3 C- Q+ A) s4 g1 t
3 m9 e/ Z8 H! B- Z
  • ',
    - v7 P9 N* L  O4 z; R$ p
$ z! V% v2 y/ T; o: |/ X
就定义了逗号,而最特殊的就是定义单引号,因为单引号会和字符串定义中的单引号混淆,因此matlab中用两个单引号表示一个单引号,也就是
  v5 k+ k  ~  e. `2 G# r" S( @6 l& K  C  z
  • a=''''
    ' N! m; G" T4 ^" S, b( R

1 @, Q! Y( z5 T表示a是一个字符变量,值是一个单引号。语句中第一和第四个单引号是字符串类型的开头和结尾,中间两个单引号用来表示一个单引号。
! D% F% R/ g5 Z1 t7 \
1 N1 k( p2 i1 m8 \+ G# O
    定义字符串变量后,workspace中出现相应的变量名,图像是方框里写了ch,双击后可以看到行列数。
8 e, f" r! k9 u5 y3 Y) y. h$ ~4 N
. g9 X; ^; x2 h

8 N! G+ w, r" W; P& J6 T7 z1 {  W" j3 V6 G

3 k( J, r$ o8 o0 d" G) H, F; X/ ]4 g4 ^* I3 p9 q7 `# R
# r1 E# O! W$ Y$ b) B+ S

" B: q& {( u# n; \  R! d% V" g& e, f; k* w# f0 L3 a
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-23 18:44 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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