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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
3 [3 b6 x4 Q  S$ n4 `* ^
matlab解决问题的最基本思路是建立脚本文件,那么脚本文件的第一段就是定义一些变量,这和C语言等编程思想是一样的。matlab提供的变量类型很多,最基础的是三种:数值变量、符号变量、字符串,其他的类型还有cell、table等。这里仅说明最基础的变量类型。
0 N( C% f  s( t0 C/ L3 I
6 w. i+ c/ p1 m  h% w1.数值变量
& E# W( K& F& E& S
    matlab中所有的数值变量都是矩阵,赋值时,以方括号作为开头和结尾,以英文逗号或空格分割同行元素,以英文分号分割各列。例如在Command Window里输入$ k* D* C6 j" U3 L7 x
/ R+ [8 q5 F8 W. ~' s
a=[1 2;3 4]
* O1 ]/ C/ r: b- ^- l

8 A2 S. }5 Y7 f9 K

# x  ]: u( u4 K) ]. V, C- y0 y
7 U5 |0 x4 S, D. v$ O8 d3 a: J. U: u! l/ g1 j) s8 C- R
可以看到运算结果,a是一个数值变量。同时workspace里出现一个田字形的变量a,说明变量a的类型是数值型。  t/ i$ P% \. U# [$ ?- Q9 o' r6 A  m

; n6 D+ ~( o/ y7 f
6 W1 A# r$ O% N/ Z2 A+ m: g
4 }% R" ~3 p4 D# O* Z0 M
向量和数字可以视为特殊的矩阵,例如
. y4 _6 u% H8 M8 m. Z+ Z6 Y
& V7 m( |3 I) N& d0 [7 ya=[1 2] 1 X7 w) F5 f, S2 J% U
- G2 F( F8 U; B$ t9 ~
a=[1;2]# K2 P" b8 a+ ]

% h& w$ D# ?/ [, M9 s- N分别是行向量和列向量。
6 p' }( m) b) ~$ l( y/ M5 o! e+ c2 I5 K
a=[1]  可以简写为a=1   是数字。
) I% u6 \' D! {% _$ M. K. {* C

, r9 C6 Y9 u1 |  n    数值变量的命名要求是英文字母开头,不能包含特殊符号,大小写敏感。这里推荐采用下划线来进行分割,例如value_of_A,这和其他编程语言的命名规则大体相当。
; N, r8 I( m: t9 G( D: @
: r7 k# G/ b8 `5 d  s# V6 m( v
    赋值中,有时需要用到等差数列,例如定义一个向量a=[1 2 3],如果比较长,赋值很麻烦,所以matlab提供了一个简单的方法
7 Z7 T3 ^+ N- {' Z; a& f* V( s( _+ ~
! o& X, E; h7 Qa=[1:1:3]2 o8 o2 K8 F/ }$ l
/ j- S- W$ @- K" A5 q, p
这里两个冒号的意思是起始值:步长:终值。采用这种赋值方式时可以获得一个等差数列行向量,并可以省略两侧的方括号。当步长为1时,可以省略步长和一个冒号,于是可以简写为/ _3 W6 ]+ G5 Z4 A, p$ x: D" b' B
$ B- n" ]. {1 ^  _# ^# t& R8 o( E/ f
  • a=1:3
      \1 Z4 R8 s) c; X" k! J

1 b( \5 R8 \: _1 J4 p
# N7 k% N- N5 D- P7 `; F; T% q
! C2 \$ N4 m$ v% x0 N
0 Z# y3 W6 H2 m
    另一种灵活的赋值方法是分块矩阵,其方法是变量名后面加圆括号,圆括号中加序号。例如6 N$ p8 B+ t+ e/ w

  b8 c7 G1 A2 x9 Ba=[1 2;3 4]9 h- w4 f) g: y5 ?
+ W# ^$ i6 T) l( F0 J0 _/ A
定义变量a之后,& D) i5 v* x8 l) O( A$ s
) t9 k3 m( w3 o2 O1 K
b=a(1,2)' a0 z* |% x: J) N1 |0 I4 U1 I  V2 ]

4 w/ Q: b0 H# e: `+ \( X; k6 p" s+ w就可以把a的第一行第二列元素赋值给b,当然也可以用
8 V* k5 W: f" q, W( y4 y
' h0 t7 o8 F* L2 \9 v" X  Ca(1,2)=1
- h7 I1 ~6 L) X2 t% D
3 x* \" h) |. ^$ z8 G( Q来修改矩阵中部分元素的值。这里需要注意,序号必须是自然数,且不能是零。当矩阵中有多个元素需要赋值时,可以将序号部分改成向量,例如5 e" t7 C9 c5 Z" K

4 }6 Q6 l* x9 L' Ua([1 2],[1 2])=[1 2;3 4]" }& [# C4 u; l3 R2 @3 U

1 B% F# _2 d3 \中把行数和列数都用向量表示,就是说对矩阵a的第1和2行,第1和2列,总共4个元素赋值。更进一步,也可以有a([1 2],1)表示a的第一列,也可以写成
7 V* n, m  G9 J8 Ca(1:end,1), X$ @" L; w0 H' V# z

1 @  p2 U8 q' r- s1 }( P% ]这里的end表示终点,即a的行数2,也可以更进一步简写成- G3 e  d1 @1 G. c) f8 S7 g1 {
3 S: j( ~8 N, e& s3 i" ^! t
a(:,1)" ?  Q: b8 [# [; i
5 O1 ~4 m2 H; ]0 v3 r$ i
这里的冒号表示从头至尾。这类赋值方法最为常用,但基本的语法非常简单,方括号表示矩阵开头和结尾,圆括号表示从矩阵中选取部分,把握这个原则,有利于读懂程序。
1 X( A% d9 U3 e7 @5 S* Q
/ @) S) Y0 o: a2 c1 [! g, I
    当然分块矩阵也可以4 ^; `. g9 }+ [' ?) a7 o
# D0 E* r9 Q  M8 T: l+ [# `% [7 S: j
b=[a a]: b$ o) \* o1 {' T6 n- a' m; V+ K
( Y/ L  z+ a1 [/ w0 W/ r6 R
这样的赋值方法,但需要注意的是,方括号中的元素必须满足矩阵的行列数要求,例如- B( Q7 r8 `) |$ l9 s% Z$ y- c

4 z! h# u% b# E7 X7 B( e2 J. m5 b2 ea=[1 1]
- |2 V9 p& l' V5 q( f- D/ {+ Q* ?* Y( D0 h
b=[1;1]
$ c9 j+ ]1 V3 e  h" }- p7 z. n8 u; c6 E" Y6 b( U5 t/ e
c=[a b]
8 ^- T, E8 s5 O1 O0 ]0 M9 [, O5 e5 J( a1 y% A! C3 @, b. \
就会引起错误,因为此时matlab无法确定c的行列数。
* K' A0 z- c8 M7 g' p
* ]- C/ O/ ^" T
2.符号变量
1 Y( A: n- G5 i3 F
/ I# B7 K% W* C
    总体而言,符号变量比数值变量简单得多,因为变化非常少,常用的赋值命令是3 s/ u) G) n2 s: Q0 Z

) o0 e# Q/ U. y& L$ ysyms a b
! H2 f* Q- o2 N: k1 N4 T" X8 i: j( |
syms表示这里要定义一些符号变量,a和b是变量名,符号变量的命名规则和数值变量一样。有时候也采用
; S+ @' Z/ d" v: n# k: j
: \* l6 g9 a/ B+ d# vsyms a real! ~6 l+ e8 ?9 @0 `

/ [! h" k3 A5 f; F! M! W来强调a是实数变量,具体可以doc syms来获得帮助。

1 ~- ]2 m! d4 f7 X$ m; S' m, J& h: o
    有些变量之间存在依赖关系,此时可以定义
/ B/ U$ h" h/ p+ n
8 `/ |$ T1 s8 u9 vsyms x y(x)
8 q$ ^  Y/ W; U; Z! [* L# C1 E$ A: m- q/ L3 m6 ~
这里声明x是一个符号变量,又声明y是一个符号变量,且y的值由x决定,这相当于数学中函数的概念。当然具体的函数关系并没有明确规定。也可以
8 f* [  m2 P3 e6 v+ G
8 a' N# v. Q) x6 osyms x y z(x,y)
5 O, _# F9 k6 V. {6 J
0 n8 C' a8 _/ d. W2 @5 D来定义符号变量z,z依赖x和y。这相当于二元函数的概念。这里的圆括号显然和数值变量中的圆括号含义完全不同,这也是学习matlab最不习惯的地方,同一个符号,由于变量类型不同会有完全不同的含义。所以在学习matlab的过程中,一定要区分数值变量和符号变量。
; a8 @1 f- f; h- k5 p, c
# q5 `: ~. \* j2 l6 a
5 Z! r! `% V& x
    上述方法定义的符号变量是一个数,或者1*1矩阵,matlab中也可以定义符号矩阵,例如
7 L9 b# w- [) ?3 ]/ B/ [6 v
' H3 }$ j& }; D& }" ]" V# Rsyms a11 a12 a21 a22
9 S  K. V/ M/ x: o8 q& g; X% T2 X! U! V3 \3 g# O
A=[a11 a12;a21 a22]
6 d5 e& @* H8 c9 y8 H1 h" E
% w: T9 s( `1 X8 k5 M就可以获得一个矩阵符号变量A。
9 [. B+ H& K" |5 p
1 Y* U5 E  W) f7 Y1 Z4 {. r7 P8 ~
  定义符号变量后,workspace中出现相应的变量名,图形不是数值变量的田字形,而是方框里有个立方体,双击后可以看到行列数。" h) t6 d; M& z6 z9 U/ r
5 s! U( G1 S% g7 A- Y; l  Z) j+ \

& `2 g3 Z" ]  l  g: ]4 i3 |6 B+ u5 S
" r- I; Q2 \; O0 x( a9 ]3.字符串
8 U; i, R8 k- _  J6 z7 m6 [6 o

9 D, C9 K+ i7 r0 E# o! f* ]    比数值、符号更为简单的就是字符串了,其定义方法是以单引号开头和结尾,例如
5 E6 R, V. x0 `4 ^
, E* {6 I- S$ d+ L0 j+ Ja='hello world', h3 u- r) ~! y: z; L; J8 o

0 s+ f' a: k  `/ m, m2 @就定义了一个字符串a,其值为你好世界。matlab中较为特殊的是,字符串可视为行向量,例如
% `3 B1 y& R: q* x6 h1 h. c6 u5 m
  • b='hello '
  • c='world'
  • a=[b c]2 `& g0 V  Q4 K' }5 A( Z: G5 V

5 j2 B  ~- g8 ~0 o
. L: Z. q9 X/ N% {( ]7 Z# I5 z% W也可以获得字符串a,其值为你好世界。另外,有时也可以将字符串视为矩阵,例如
0 e+ c2 D5 N, x, t
" G; b8 G- f8 {3 E! u7 @! A* N3 }a=['ab';'cd'], H. b& m, O& L, T; {& Q) K2 K

+ E* I/ o' d/ a2 c7 n# O0 {2 e1 M但这种用法很罕见,同时要求各行字符串长度一样,否则将违反矩阵行列数规定。

: x9 @6 J, ^1 I1 c, _0 i: P# n3 X* b8 P, M: r9 N
    当然字符串的值也可以是特殊符号,比如
. F4 P2 B% Q7 y9 k. m/ s; w
- }5 r& W# n4 @$ e" M+ R# l1 s
  • ',) N! {9 j$ ^* b2 u" ~( V
9 c; s+ S6 _* B% X* s. Z
就定义了逗号,而最特殊的就是定义单引号,因为单引号会和字符串定义中的单引号混淆,因此matlab中用两个单引号表示一个单引号,也就是- B' G  Y" ?. h. e& y; m" X
1 T9 t+ V, P0 p9 A9 O
  • a=''''& x" h* n& d2 `6 _$ M
1 Z7 z5 V$ W! o  t0 L, V: s1 f1 G
表示a是一个字符变量,值是一个单引号。语句中第一和第四个单引号是字符串类型的开头和结尾,中间两个单引号用来表示一个单引号。
6 u. j: t6 \1 z* A: ^* l" q
' U) K; F6 D: \
    定义字符串变量后,workspace中出现相应的变量名,图像是方框里写了ch,双击后可以看到行列数。6 w" Z. Z2 `" f  R1 V( q( J; ?

% D4 A6 d' Y+ e2 z% y7 q
6 U; i: w9 G; Y/ L9 e

9 H; s8 F) `) L  o" _7 @8 T
+ [. G' @1 z8 ~+ E6 ^
! ^- Q0 S* Q1 v: O* [" V& \
4 y+ M/ _3 e+ h  S% h( {3 ?# _4 E
% y& m. s1 d, k4 j
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-1 01:29 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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