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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
2 R; ]9 |6 `; \$ X* y& B. b! O
matlab解决问题的最基本思路是建立脚本文件,那么脚本文件的第一段就是定义一些变量,这和C语言等编程思想是一样的。matlab提供的变量类型很多,最基础的是三种:数值变量、符号变量、字符串,其他的类型还有cell、table等。这里仅说明最基础的变量类型。
1 _" D1 K  d. n8 ]2 ~) \1 ]: E8 M8 P
1.数值变量

5 y; _: [8 U+ C0 l! K0 k, g* O& C( k    matlab中所有的数值变量都是矩阵,赋值时,以方括号作为开头和结尾,以英文逗号或空格分割同行元素,以英文分号分割各列。例如在Command Window里输入
5 ~5 B9 }+ N" z, T. Q! W2 i! s! j: Z, U, N* P* E. |% z
a=[1 2;3 4]
3 }; c% b! l' C( K0 V$ S- p
: l* D6 |+ T$ b6 _
: y; o7 H3 y/ k' m
8 Y6 a2 }4 C8 W7 m& X2 N
- H# K3 w* r) i5 I+ z* F' u
可以看到运算结果,a是一个数值变量。同时workspace里出现一个田字形的变量a,说明变量a的类型是数值型。
9 Q5 P5 z! r1 Y: v# C
/ w" H  f2 Q! x8 @/ k/ \3 E

" f: ?0 [& ?1 R3 `8 r
# H( V9 _4 N( q8 P9 V5 b' j1 f向量和数字可以视为特殊的矩阵,例如: b3 C! O9 I2 x% E- I& v
% U# m4 s5 N1 `& ?4 e4 B1 u/ k
a=[1 2] - F' l0 s$ E  p1 ?' y
+ j3 G7 x& W( q# ]7 l
a=[1;2]
/ D. f" H. ?# c" C
" b* b8 c4 N. J; U! t! A$ w分别是行向量和列向量。
8 E; b/ H% A4 z- r* R- Q% X% Z4 O! h0 s7 q% H
a=[1]  可以简写为a=1   是数字。
5 p2 \- |  P) R' A
6 d$ S$ W8 I4 C  _! {
    数值变量的命名要求是英文字母开头,不能包含特殊符号,大小写敏感。这里推荐采用下划线来进行分割,例如value_of_A,这和其他编程语言的命名规则大体相当。
5 K- j) p1 v; R
/ p  A9 I2 B( F) u  Q1 }& v
    赋值中,有时需要用到等差数列,例如定义一个向量a=[1 2 3],如果比较长,赋值很麻烦,所以matlab提供了一个简单的方法" O3 N1 C2 Y- U2 _  F9 {

  H& @$ x; F0 q9 M4 Va=[1:1:3]& J; T# g) D' c) \

. o* N+ i9 B7 A: Z这里两个冒号的意思是起始值:步长:终值。采用这种赋值方式时可以获得一个等差数列行向量,并可以省略两侧的方括号。当步长为1时,可以省略步长和一个冒号,于是可以简写为
' r1 A$ T1 C. ^  \5 x) I! N
7 S; \1 E$ g% I
  • a=1:36 \* J# j  S( z$ B7 x! {0 o7 [! H
4 u3 Y# M' t. O5 m9 }
' \: [9 f5 M. g) W; j0 K, z1 S
& a' e, K1 s# `. v& @
5 o% b- W: d. ^
    另一种灵活的赋值方法是分块矩阵,其方法是变量名后面加圆括号,圆括号中加序号。例如. ]- g. r: o+ e. E# L

. w* ~3 c7 K2 y/ n1 g# Aa=[1 2;3 4]
  z. @8 w2 G) i' Q
4 V* t% ~3 }( X8 A5 o& B定义变量a之后,! a8 ]% M) S+ d+ m3 P( u8 ]

4 ?$ h2 Y) J7 ]4 B- ib=a(1,2)
+ V# b  {6 k+ S+ c1 J9 N* z; {3 v: K$ M- R) [1 p
就可以把a的第一行第二列元素赋值给b,当然也可以用
$ t7 q' h4 p# t$ p! U/ F/ P! S1 K9 G. a$ P) C; B$ _: L  u
a(1,2)=1& c' d; O# K1 X* B! B) C

9 E+ G4 H1 ~# |. m来修改矩阵中部分元素的值。这里需要注意,序号必须是自然数,且不能是零。当矩阵中有多个元素需要赋值时,可以将序号部分改成向量,例如4 O( X: x% m, V: O9 r
6 M- b. \, ?$ b" J8 N+ V& W
a([1 2],[1 2])=[1 2;3 4]
) X- h# z. R! I, z  u( s- A9 T2 M' j8 s5 S
中把行数和列数都用向量表示,就是说对矩阵a的第1和2行,第1和2列,总共4个元素赋值。更进一步,也可以有a([1 2],1)表示a的第一列,也可以写成
0 H& A+ w2 s5 g0 \: E: Aa(1:end,1)7 q" c+ y5 j" s  k- B! c

# c% U, Z4 ?/ Q这里的end表示终点,即a的行数2,也可以更进一步简写成/ ]. {" z1 D+ q. j" H9 Q! d
+ e6 W& X5 h8 x9 \
a(:,1)
% T) y/ R/ ^3 b  E, X
/ E2 _" q  A) L0 B: |3 N3 |这里的冒号表示从头至尾。这类赋值方法最为常用,但基本的语法非常简单,方括号表示矩阵开头和结尾,圆括号表示从矩阵中选取部分,把握这个原则,有利于读懂程序。

3 a: B. Z$ b$ M' z" W
$ Y/ z( B/ l5 Z- x; {" O    当然分块矩阵也可以( `. S; @; B" a; {( _* r. O5 T! y
0 \# n7 n9 q- X2 x  A( |3 A
b=[a a]
6 v  P5 y9 t, N+ h  v( V% N5 x* C; Y5 ]: t: W6 P- L
这样的赋值方法,但需要注意的是,方括号中的元素必须满足矩阵的行列数要求,例如
* B0 C' z1 q6 R' {. _/ p- M* D; l
a=[1 1]7 c6 n! Z4 U7 w4 q, d4 m
- U- ?; W4 n# i9 o/ o0 Z& @
b=[1;1]2 {/ `) W" }3 ~$ i

9 F) K; l; V! ]: d0 F! ^2 ?4 Pc=[a b]  r1 Q! U* Q- ]  L; W7 Q7 p& o

( x; O" S; v* `- ^- D- z1 f就会引起错误,因为此时matlab无法确定c的行列数。
( {2 L4 c6 @2 O% V$ c5 S$ i  b0 {1 ?. ]
3 t8 q7 r4 l# d. P
2.符号变量
) M9 o) D/ m" J* ]

6 v2 N. b0 l: d! d# s/ e    总体而言,符号变量比数值变量简单得多,因为变化非常少,常用的赋值命令是7 @3 S% r: G( R: x
! A- P3 `+ d1 L+ m" F9 q1 c" r
syms a b
9 K! \, M; T4 L( N9 x# P5 J; X; Z2 z$ I
syms表示这里要定义一些符号变量,a和b是变量名,符号变量的命名规则和数值变量一样。有时候也采用
* O2 [9 e) B9 U1 r% O) V+ Z6 \4 @" T
4 v( I; m8 {4 t2 T% _! osyms a real1 K+ l% b& s- @0 G9 l6 q6 L4 f  |

" k1 D& q' j# H5 J$ F  k, b. P来强调a是实数变量,具体可以doc syms来获得帮助。

* s7 b+ o: |1 @4 a. o4 q$ x+ q. M1 o
    有些变量之间存在依赖关系,此时可以定义
  t. h% x, g( N
0 c4 U6 ]; h3 n9 V* Q9 k+ k$ Fsyms x y(x)  A* t/ D9 R9 c/ A+ p7 L8 M

  o9 ]( W; x* N9 \" B# `这里声明x是一个符号变量,又声明y是一个符号变量,且y的值由x决定,这相当于数学中函数的概念。当然具体的函数关系并没有明确规定。也可以
- S, l, t# R. L/ J( |7 ?* E$ R% L" ]: @! T) d. a6 ?) G
syms x y z(x,y)
+ a1 o1 G$ m8 g4 r) T- Q  R
: K5 v6 s+ ~" ^来定义符号变量z,z依赖x和y。这相当于二元函数的概念。这里的圆括号显然和数值变量中的圆括号含义完全不同,这也是学习matlab最不习惯的地方,同一个符号,由于变量类型不同会有完全不同的含义。所以在学习matlab的过程中,一定要区分数值变量和符号变量。
2 ?! B) `- k3 Y  q8 l% J) P" y( k1 t& z. o

3 G' j" N& M( G* g) H    上述方法定义的符号变量是一个数,或者1*1矩阵,matlab中也可以定义符号矩阵,例如7 A, E2 J/ d. `+ `: e* z0 c
2 |3 `" q. m6 o3 L/ E8 C
syms a11 a12 a21 a22
9 K2 `6 R+ ^1 p' w# ^: M
$ \, N4 h- B: w, yA=[a11 a12;a21 a22]
/ b3 u. b: y$ b" H, R7 _7 A6 `2 l6 D7 _) m1 V+ M
就可以获得一个矩阵符号变量A。
1 j. p$ y3 W5 z$ T8 j: R" ?

3 B: @7 D+ V- A  定义符号变量后,workspace中出现相应的变量名,图形不是数值变量的田字形,而是方框里有个立方体,双击后可以看到行列数。
: y, [/ d, f) v- U( {: l
3 o4 T; N0 p8 p5 ^: ?/ |
% x- K9 Z9 ?) N; p' ]8 k2 U
( z8 J! j! h/ O+ j* A8 F8 i
3.字符串
% H  N0 S: o  ^+ @# U- b5 s: L

: Y# O# G% j( F    比数值、符号更为简单的就是字符串了,其定义方法是以单引号开头和结尾,例如9 V0 v7 J0 P  ?
1 V# o0 o1 J% y" N3 z9 D2 C7 Q
a='hello world'
! j: b4 w0 }! I- |1 `8 n$ p# s% g1 N, t2 x
就定义了一个字符串a,其值为你好世界。matlab中较为特殊的是,字符串可视为行向量,例如
3 a2 U- v( a3 }, K
( C8 s- Q2 T$ h8 P
  • b='hello '
  • c='world'
  • a=[b c]" Q" ~2 z; |; i1 O- y; |
0 ?/ T, Y) X5 {+ O. G! I" ~# \

3 q3 e) J5 x- Y也可以获得字符串a,其值为你好世界。另外,有时也可以将字符串视为矩阵,例如
# ~( Y, O9 G8 ~+ m7 X+ \& I* k; q/ s7 X/ m1 f
a=['ab';'cd']
. E" T7 ~7 P; _! j# x1 S
$ _2 Y0 }5 P* f. X7 n* W" c; z但这种用法很罕见,同时要求各行字符串长度一样,否则将违反矩阵行列数规定。
' K/ V/ O3 o+ t7 i

1 ?% Y3 t5 m7 T# j    当然字符串的值也可以是特殊符号,比如
* ]1 t# {2 ?* x7 U( X8 F7 ]% g/ b+ j) J0 L7 X
  • ',8 S/ R; p9 v/ R/ ^4 X% j/ Q  p
  `: P7 b9 N* z; p- o5 X8 u
就定义了逗号,而最特殊的就是定义单引号,因为单引号会和字符串定义中的单引号混淆,因此matlab中用两个单引号表示一个单引号,也就是
# A1 b/ L8 l3 ~. s: j
; b$ l$ x' H! I; {
  • a=''''
    9 _2 }) @* _* A" b) P
/ t3 k9 F! z) d) n7 c3 J
表示a是一个字符变量,值是一个单引号。语句中第一和第四个单引号是字符串类型的开头和结尾,中间两个单引号用来表示一个单引号。

( N2 s- g* {& b" L2 `' v2 Z, ]
! B0 z0 r3 i3 a$ ?* X4 N    定义字符串变量后,workspace中出现相应的变量名,图像是方框里写了ch,双击后可以看到行列数。# Y/ l% M! W+ {9 F; z
2 X/ u% R/ J" Z6 v. k; E9 s8 T9 ~
: L0 Y; U  E) f8 ?
* I  h- Q7 l' d+ Q9 h( w
0 }4 P& J: {( ^* x$ q

4 m4 O+ v2 q% K/ \0 Z2 |- \$ B7 C9 V- L" @

) F. h' m  i( A0 r  h7 a/ |2 ]  o5 R5 p1 ~1 S
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-29 10:20 , Processed in 0.187500 second(s), 26 queries , Gzip On.

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

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

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