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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
' T; q' z6 Q, E/ o
matlab解决问题的最基本思路是建立脚本文件,那么脚本文件的第一段就是定义一些变量,这和C语言等编程思想是一样的。matlab提供的变量类型很多,最基础的是三种:数值变量、符号变量、字符串,其他的类型还有cell、table等。这里仅说明最基础的变量类型。
! e/ `  t' J: R, t1 C$ |" v6 \2 Q, G& S5 J6 ^/ U* |4 ^
1.数值变量

/ I! \( H+ s! ~  y8 |    matlab中所有的数值变量都是矩阵,赋值时,以方括号作为开头和结尾,以英文逗号或空格分割同行元素,以英文分号分割各列。例如在Command Window里输入! l9 k, x" j- X

( U4 B7 W. L1 a  Ha=[1 2;3 4]
) R4 _7 b& i6 L  P; \  W: i

) s) i; z- S! U/ ~( `; Y
+ k! t) D7 k( [; _6 M4 V

* l5 ^6 I" B5 {7 q9 C
$ Z9 ~  z6 G9 ?0 u6 l3 D) g; V; n可以看到运算结果,a是一个数值变量。同时workspace里出现一个田字形的变量a,说明变量a的类型是数值型。5 H9 R3 Z1 i/ y+ A& |1 d+ P

& ?9 q8 E- K3 H* C  `& E
, S4 g6 x. K% h7 m% J

2 R& ~' _( v/ h, T3 e6 t$ C" V向量和数字可以视为特殊的矩阵,例如
0 [+ T# L- r3 {( f, k
% g7 K  u: x/ s! j6 X7 wa=[1 2] 0 z! |; b5 z5 g
" l" R, Y( C& r. |: P+ Y* Q
a=[1;2]
; K) v2 p+ g, G3 r/ L
$ r' v6 |! w6 ~# G分别是行向量和列向量。
3 e6 j. S3 ^; b: B4 m+ m) f2 m/ i4 }0 B( p1 y" ~. f  b9 i9 `3 V
a=[1]  可以简写为a=1   是数字。

3 J/ l' l8 `# M8 J, }# }9 H( C# F$ l& p7 \0 ^' x2 `( D  o+ W
    数值变量的命名要求是英文字母开头,不能包含特殊符号,大小写敏感。这里推荐采用下划线来进行分割,例如value_of_A,这和其他编程语言的命名规则大体相当。

) r5 |: G* z& z; K
/ h6 o2 d. b/ h, W( H    赋值中,有时需要用到等差数列,例如定义一个向量a=[1 2 3],如果比较长,赋值很麻烦,所以matlab提供了一个简单的方法
$ ^# x( D3 s8 W3 [  x- S! G; {# O1 i7 c# I* v# W  O% C9 h$ ^
a=[1:1:3]
. ]7 j; V$ u, k. s: q9 n7 q6 k
. ~$ I6 C  G+ w. [这里两个冒号的意思是起始值:步长:终值。采用这种赋值方式时可以获得一个等差数列行向量,并可以省略两侧的方括号。当步长为1时,可以省略步长和一个冒号,于是可以简写为
# t: I1 j+ A: A, Z& U, {' g) H+ z" [( G) b1 j+ f+ t' y: w
  • a=1:3$ g, T% R+ D! k" c6 j
7 P* {; C+ V- Z

/ H# P4 ]( ]4 h! c. }. H% q
# H) P! @  O; ]- C) M' \5 }" r$ Q

8 }2 w7 }+ E! M8 S/ W' {! R    另一种灵活的赋值方法是分块矩阵,其方法是变量名后面加圆括号,圆括号中加序号。例如
/ \& o* m* ~( p4 c) Q: G5 |
) U8 A% t& ]6 ~6 {a=[1 2;3 4]# l% o! V  d8 F& [# }% `) h
) Z! c1 t& t9 |7 Z5 D( t5 m
定义变量a之后,
7 p9 Y) m+ @9 ?6 f$ M+ N+ E+ k3 I& m6 W/ x) B. g  {
b=a(1,2)$ C3 `* f, T# Y7 o) a$ W0 t0 R

5 z. u, l5 c  i% F# J8 U/ q就可以把a的第一行第二列元素赋值给b,当然也可以用
4 |1 m& \" m9 {; n
$ \- C* ~/ M# E* G. w3 o. Qa(1,2)=1, B; A5 V8 t; z

& e1 [1 e6 T. |- q7 e来修改矩阵中部分元素的值。这里需要注意,序号必须是自然数,且不能是零。当矩阵中有多个元素需要赋值时,可以将序号部分改成向量,例如4 @  F1 k8 b9 i
% d' Z  X) U( `: E$ P7 c
a([1 2],[1 2])=[1 2;3 4]" g" \" i; ^' E' H

! u% o( T) m# H$ W) A* e2 T中把行数和列数都用向量表示,就是说对矩阵a的第1和2行,第1和2列,总共4个元素赋值。更进一步,也可以有a([1 2],1)表示a的第一列,也可以写成
* z/ {, [: n7 o9 r' |' Y( B6 xa(1:end,1)
5 J2 a' S9 L% _" l. T1 {
2 s( }! k4 Y  h这里的end表示终点,即a的行数2,也可以更进一步简写成
0 p# T- Z3 W2 T6 Z
7 |" X$ i$ w, S; t5 m- S+ La(:,1): k3 G- b# g* T; U/ f# r1 E
% C; g* C; S; B5 v
这里的冒号表示从头至尾。这类赋值方法最为常用,但基本的语法非常简单,方括号表示矩阵开头和结尾,圆括号表示从矩阵中选取部分,把握这个原则,有利于读懂程序。
5 ~9 n* W" K. o6 L8 D
4 y- k+ ^3 U3 ~# R" e
    当然分块矩阵也可以
2 }4 X  Z; P6 a0 d. C) G; X$ }" |3 z  d, Z& S- ^
b=[a a]- Y+ Q3 k% W8 `. T6 H8 ^
8 O+ F- o% M0 V, e! i9 h' Z* C& i% Z
这样的赋值方法,但需要注意的是,方括号中的元素必须满足矩阵的行列数要求,例如
7 G, V) H/ P0 t( r: C7 O$ P3 i0 \$ y
a=[1 1]
7 ~/ U# m8 G$ b' n
+ H+ ]: e+ T! u7 n, X  Db=[1;1]
% X, x" b* d" R& }; M' j9 e# R+ K! b- V- g  m
c=[a b]
  z  r  f9 t# p
, X2 ?  N) o# ^% K. d就会引起错误,因为此时matlab无法确定c的行列数。

; d$ X* I7 h4 ?6 {4 o5 }% w7 d0 u3 {- Y$ G
- ~5 N: _$ n' O" ^. p' ^2.符号变量

% n5 P% C7 ?0 K5 }! q) D/ d5 n3 ?: @  @
    总体而言,符号变量比数值变量简单得多,因为变化非常少,常用的赋值命令是2 c1 K6 X8 q# u% g' u
$ q  |! Y6 E+ v
syms a b) @0 R) Q" X7 z6 f

$ w' p$ r$ ~+ K/ |& k+ m# X, qsyms表示这里要定义一些符号变量,a和b是变量名,符号变量的命名规则和数值变量一样。有时候也采用5 W2 y+ I5 S# B* x# D

+ G" ?9 d) o* n/ lsyms a real2 G$ e/ {+ p  w. K. k
( L- p+ A0 B* C) |8 ?9 S1 \
来强调a是实数变量,具体可以doc syms来获得帮助。

7 M7 M3 T- q# ^& z9 q! [# Y
3 j5 Y6 m' E/ V    有些变量之间存在依赖关系,此时可以定义
8 @% p; ?( |7 Y" B4 a3 Z0 O( S, {& S# G
syms x y(x)4 ?$ w, G. ^6 E, Q; E) _& e

% q9 ?- e, R9 y! M% n4 N这里声明x是一个符号变量,又声明y是一个符号变量,且y的值由x决定,这相当于数学中函数的概念。当然具体的函数关系并没有明确规定。也可以: M2 s9 M6 ?0 W; ^! R. N- |: w
6 I! }: t& a- T
syms x y z(x,y); S4 P$ z2 J! E3 ~) _

( ~' U+ W; Z' j* D6 P9 o来定义符号变量z,z依赖x和y。这相当于二元函数的概念。这里的圆括号显然和数值变量中的圆括号含义完全不同,这也是学习matlab最不习惯的地方,同一个符号,由于变量类型不同会有完全不同的含义。所以在学习matlab的过程中,一定要区分数值变量和符号变量。
3 [+ J( s' s$ j1 ?7 A3 ?3 E! X* B1 y& X, U- e' b2 E7 v
! k" q% w/ I3 r' C2 V: y
    上述方法定义的符号变量是一个数,或者1*1矩阵,matlab中也可以定义符号矩阵,例如4 ^7 T/ |% q: V0 N7 w  l" m
4 E( ^/ q; s7 J5 \3 g1 |2 L
syms a11 a12 a21 a22
7 a0 ]3 |7 \8 ^' Q' {, y2 w
1 a  {  W0 e; \3 pA=[a11 a12;a21 a22]1 b( j9 g9 K0 T9 l( a

4 T5 {, C4 R" K0 o# J5 w0 ?+ Y" p. P就可以获得一个矩阵符号变量A。
2 \: V! ^( G& [+ `* j/ R

% F8 L% f# B. K# Y6 O9 _* e* l& |6 Q  定义符号变量后,workspace中出现相应的变量名,图形不是数值变量的田字形,而是方框里有个立方体,双击后可以看到行列数。
: I- }3 p- w! d0 o, z% X* ]) T% Z3 D3 F: Z9 N) U  |1 r

$ S: R( g; @# z2 z2 j5 a" t; Q8 G- z2 N( h2 |6 Q
3.字符串
& m; J" J% k2 t* y
" c! `- e* f; @6 d7 i$ `/ o
    比数值、符号更为简单的就是字符串了,其定义方法是以单引号开头和结尾,例如
& z& T' L- V1 }, N, e# E0 z6 K" u8 S/ \& `$ i$ C+ X6 n! q! s  k6 L4 j
a='hello world'
1 v, B+ A) L/ q! I& z! E9 b, X3 c# [7 h8 R" L/ u9 _+ P
就定义了一个字符串a,其值为你好世界。matlab中较为特殊的是,字符串可视为行向量,例如
* W1 O* A  p' c/ Y8 Y: u5 P
3 `- F) x' R  q: \# _7 v$ }
  • b='hello '
  • c='world'
  • a=[b c]. U+ \) q4 L: W9 _% a
; Q% F. b) M; S( @+ V
2 J$ d, a% _4 ~  K- I4 Q. a
也可以获得字符串a,其值为你好世界。另外,有时也可以将字符串视为矩阵,例如2 q$ _7 v# {/ m$ D
$ ]8 g1 L3 D3 e# f
a=['ab';'cd']
0 w7 [$ s9 `/ G' q' B" H1 F- y( @+ M5 m6 w+ M$ X3 S
但这种用法很罕见,同时要求各行字符串长度一样,否则将违反矩阵行列数规定。
8 B6 V9 F5 z  r' I# D2 c
% w( S! q& @( p* z9 ^- R
    当然字符串的值也可以是特殊符号,比如) x& H# f2 ~7 ^% {$ J& f
1 n' P8 f- ?* @) q5 n( E: G( F8 D% L
  • ',9 ~9 a, K  B) a( x$ d$ m

* b& V0 y% Q. w) f3 i就定义了逗号,而最特殊的就是定义单引号,因为单引号会和字符串定义中的单引号混淆,因此matlab中用两个单引号表示一个单引号,也就是6 |/ {/ z' U5 A9 O8 V
, l: w0 I7 k4 }) j8 e9 Z' d
  • a='''') T1 q% H7 N( }6 v) u8 i

! q* R% M8 u2 W4 ?, ?. s0 y表示a是一个字符变量,值是一个单引号。语句中第一和第四个单引号是字符串类型的开头和结尾,中间两个单引号用来表示一个单引号。

  Y& q: i9 T% K3 o' y2 Z" T" T
# u/ ?4 J' d- T! i& ^    定义字符串变量后,workspace中出现相应的变量名,图像是方框里写了ch,双击后可以看到行列数。
. ]6 t( O4 y4 ~! K- D3 s
# w! m) _& Z7 ?

& A7 F0 I4 D5 y3 Y5 c2 S
" y# X9 P' x& ~. Y' G! ?1 r
' }( G! I, B4 i2 \3 J' `
: k4 _0 e  V8 M- ]. i# [. U/ H8 f" M& H1 m# X& p3 o, V5 T/ g8 X! n
) J* V0 w& s; F  N& \

. V- ^0 C: p% _* K! _. R0 n* F
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-24 11:22 , Processed in 0.187500 second(s), 27 queries , Gzip On.

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

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

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