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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
. O( I7 y6 l5 y8 I1 N. a( F
matlab解决问题的最基本思路是建立脚本文件,那么脚本文件的第一段就是定义一些变量,这和C语言等编程思想是一样的。matlab提供的变量类型很多,最基础的是三种:数值变量、符号变量、字符串,其他的类型还有cell、table等。这里仅说明最基础的变量类型。1 u' ?6 n$ V+ m) X

% W# b, M* Q; I. G/ g# X1.数值变量

& N+ [2 n$ V. c+ U) d8 Y  Z1 ?    matlab中所有的数值变量都是矩阵,赋值时,以方括号作为开头和结尾,以英文逗号或空格分割同行元素,以英文分号分割各列。例如在Command Window里输入
( b$ C0 u) m' f8 S" H; p, q8 S) N6 w% m
a=[1 2;3 4]

! m8 @8 ?1 B9 Q  a6 ?
" S" A/ H: i% y2 h
5 J# V1 s% |  t  ]# K5 U, f
. z5 `1 k. W# {; Z, b' n: g

8 n( K) ]6 {& d) u, Q可以看到运算结果,a是一个数值变量。同时workspace里出现一个田字形的变量a,说明变量a的类型是数值型。
2 P! Z5 z3 q+ X, E( X  B) y% n, T) j+ J* B) W  R* o

2 `8 w2 i  M0 j/ D" |" w3 {( A9 r# v7 [$ U: J7 [! Q4 u
向量和数字可以视为特殊的矩阵,例如
/ j6 d, y. D3 r- j" y( c+ r8 U  w. Z% F, m  X
a=[1 2] 8 e4 B  u0 |/ l+ y

, V5 n) T8 t# Pa=[1;2]! v0 Q2 i/ g+ c5 G* d8 g0 |7 C, {* ?

% H; ?; V% Y0 O" U; f分别是行向量和列向量。* T  {  M9 P$ u8 `/ k! x' b* F0 a
! Z1 g3 N2 [) I8 J1 C
a=[1]  可以简写为a=1   是数字。
% C' y+ H" d. U# S! T
! z* L2 F1 N8 r5 K/ Q6 R
    数值变量的命名要求是英文字母开头,不能包含特殊符号,大小写敏感。这里推荐采用下划线来进行分割,例如value_of_A,这和其他编程语言的命名规则大体相当。

- ?$ X) S. z* L5 h8 A
; f2 o' j1 H6 L- U    赋值中,有时需要用到等差数列,例如定义一个向量a=[1 2 3],如果比较长,赋值很麻烦,所以matlab提供了一个简单的方法
) t! S* X# g3 s* Q: q! b6 E
4 ^5 J# {3 \& D3 D* e! ua=[1:1:3]
  S3 _( ]; E, u0 M9 S9 P) ~+ m
, }) U  H& R- c, i8 a% z这里两个冒号的意思是起始值:步长:终值。采用这种赋值方式时可以获得一个等差数列行向量,并可以省略两侧的方括号。当步长为1时,可以省略步长和一个冒号,于是可以简写为
0 K' x1 g% x! N4 f1 A
0 U" u* v# v% v  W
  • a=1:3
    5 }  s6 j+ V( s; Y6 U& `" j
  M6 V) V0 b. V

' v& D, G6 Y6 z. D0 y$ H7 d7 {

$ ?8 w: F: n, p$ m* w. Q
6 h2 y) X! O1 [7 E    另一种灵活的赋值方法是分块矩阵,其方法是变量名后面加圆括号,圆括号中加序号。例如
* z# u! c- d6 F- x7 n+ D
$ |0 W; O# ]+ c0 e* |0 s9 m5 b4 Ba=[1 2;3 4]
! V( s* j6 g- `
# t9 m1 \" H2 b0 R定义变量a之后,9 w  r/ \$ X# N+ `3 |; l
# O3 s' v3 o& N) v3 S( u, F7 P+ ^1 L6 Q
b=a(1,2)
8 }  p6 ?$ V. V+ Z3 v  K$ o8 ]4 p, D  Q( D
就可以把a的第一行第二列元素赋值给b,当然也可以用
* K0 ?$ D7 N* ^- @0 E; u* q
4 ]. |* p4 r, Na(1,2)=14 L) I- @- [8 H4 r& h" \" h
1 K; C5 M4 S3 G
来修改矩阵中部分元素的值。这里需要注意,序号必须是自然数,且不能是零。当矩阵中有多个元素需要赋值时,可以将序号部分改成向量,例如
) ^+ p0 E) q  x6 i3 z' O* x: F9 V' {3 e* a! f
a([1 2],[1 2])=[1 2;3 4]0 Q5 o& D2 U+ \1 u# w
8 ]2 r0 f5 B' [8 A
中把行数和列数都用向量表示,就是说对矩阵a的第1和2行,第1和2列,总共4个元素赋值。更进一步,也可以有a([1 2],1)表示a的第一列,也可以写成
4 B2 j4 K" f' |2 c4 J( pa(1:end,1)
4 I% F3 I7 ?# e8 P
' N" N( u, v% n) U, ?( Z这里的end表示终点,即a的行数2,也可以更进一步简写成
8 H9 H0 c5 {, [0 w- f4 L7 R% p! B9 v9 ]) O
a(:,1)3 J& d1 P6 v" F0 |

5 m4 x6 ~* I% P; }- E这里的冒号表示从头至尾。这类赋值方法最为常用,但基本的语法非常简单,方括号表示矩阵开头和结尾,圆括号表示从矩阵中选取部分,把握这个原则,有利于读懂程序。
' \1 A" u; P3 I8 g) e
3 {6 J% s& i% N, r  K. K$ e8 b
    当然分块矩阵也可以- {# l  T4 H7 K& J; Y
: W/ G6 @) f* E9 ^5 B! \7 p) d& j
b=[a a]
$ F' j1 h' K: q( e0 i& Z- Y7 t4 o$ E" d% a" O& Y# \
这样的赋值方法,但需要注意的是,方括号中的元素必须满足矩阵的行列数要求,例如% ?" q' H0 W" F/ a. v7 f

/ V1 S" {. t' z' Ha=[1 1]
  l  T' i  c4 }2 m; c. z6 E* ^/ h0 r+ L7 C; }  X
b=[1;1]
8 q4 u8 P5 b  `7 v/ n& Y- M5 p9 {% i  D2 y, x
c=[a b]( `* [2 J0 g1 U. i" g+ ]  e3 Z9 I
+ O) X3 s$ I6 I8 U2 T# R) ~
就会引起错误,因为此时matlab无法确定c的行列数。
' K- L( A1 d* k5 U; |+ L
8 Y  [$ f1 E& i9 ?$ i6 ]
2.符号变量
& ~4 S* e  n4 i# H/ O$ K

6 V+ G* y3 C/ I3 Y0 a& q8 \' }  Z    总体而言,符号变量比数值变量简单得多,因为变化非常少,常用的赋值命令是8 r/ i" u) v7 l' r& Q
: ?# b! F! D6 b7 R: }
syms a b! ?% M  i3 [; W! e; `+ Y) I

* ?; h, u$ j4 c8 asyms表示这里要定义一些符号变量,a和b是变量名,符号变量的命名规则和数值变量一样。有时候也采用
/ _( @; ]- e- U9 D. \! Z) y3 I* G+ j) I( ~) V# g) @: C
syms a real
5 k6 g+ k: I) H! H
$ V4 _# _5 a2 s& r) g7 q, T来强调a是实数变量,具体可以doc syms来获得帮助。
, S( m4 I/ H: v5 S5 Z7 s" |

# P$ q' H. b2 u/ {1 K    有些变量之间存在依赖关系,此时可以定义3 y- y! R1 Z. C9 F! X  |. W
( ^' E. A) ]7 X& s
syms x y(x)
: v: v) V) S7 R/ B  Y5 X# K
4 n$ e& H2 h8 \3 Q6 O- B4 M这里声明x是一个符号变量,又声明y是一个符号变量,且y的值由x决定,这相当于数学中函数的概念。当然具体的函数关系并没有明确规定。也可以
" r7 f0 V5 v( s
; R7 j. B1 p& b2 dsyms x y z(x,y)2 G4 f. c; e6 O1 c
5 F2 `8 j3 b9 m6 l7 p& k
来定义符号变量z,z依赖x和y。这相当于二元函数的概念。这里的圆括号显然和数值变量中的圆括号含义完全不同,这也是学习matlab最不习惯的地方,同一个符号,由于变量类型不同会有完全不同的含义。所以在学习matlab的过程中,一定要区分数值变量和符号变量。
/ W! ~" r% R6 T, X( a3 d' d+ |! p/ ~, s2 P8 u
& ^" k$ ^9 M0 N% u* |
    上述方法定义的符号变量是一个数,或者1*1矩阵,matlab中也可以定义符号矩阵,例如& p8 i2 o& f( e

* R' n9 C2 h  b9 b3 y& c, v+ esyms a11 a12 a21 a22. @4 H0 }5 ^( V% w/ X
, l6 J0 ?4 O" f2 a' S0 |
A=[a11 a12;a21 a22]
! t4 z- \" E9 v# Q: R
7 m/ O0 |+ Y' Z( y就可以获得一个矩阵符号变量A。
7 \8 h9 ^  o8 x  E
: q0 G2 Z1 C; F& N0 a
  定义符号变量后,workspace中出现相应的变量名,图形不是数值变量的田字形,而是方框里有个立方体,双击后可以看到行列数。6 ^  P- f7 c0 Z) F4 S
# |- g* g* O' Y  i+ L# C

: b7 k$ u# t* B5 X6 v
2 u! X- J- X6 _7 E4 q) x5 E3.字符串
! N: \4 o4 e. a

7 P/ p8 u9 h0 H7 X0 Q" V    比数值、符号更为简单的就是字符串了,其定义方法是以单引号开头和结尾,例如0 m5 }* w( f* i$ j
1 a* ?. G9 ~2 u
a='hello world'2 W* s7 {! e# Z/ {
8 j# K; E' \& g8 Y6 J) s
就定义了一个字符串a,其值为你好世界。matlab中较为特殊的是,字符串可视为行向量,例如7 \1 K. r' ^. N9 z8 P) m2 W* m$ q

1 r" e, u5 u) B  k* M
  • b='hello '
  • c='world'
  • a=[b c]2 M# X9 `/ S5 W/ e

  K0 `" p' u5 D$ ?( V
, o: v; u4 d2 b2 v# N. N也可以获得字符串a,其值为你好世界。另外,有时也可以将字符串视为矩阵,例如
' U! F( @" l, Y$ t. b; P4 y" ]- u- Q
a=['ab';'cd']. h, y% n- ~1 t( y- ]; i
( g/ @2 K  c! D8 D
但这种用法很罕见,同时要求各行字符串长度一样,否则将违反矩阵行列数规定。
( n' B2 e5 @9 F

, y. @; Q! A7 E9 F8 w    当然字符串的值也可以是特殊符号,比如* Y6 G& V8 g, }' j. ?' v0 D
( R6 T! t1 M# a" j# l7 c; i$ I
  • ',. ]6 U6 @2 Q$ V- r5 v
0 |+ y& B6 ~  A5 ]9 c' G0 t* q* Z
就定义了逗号,而最特殊的就是定义单引号,因为单引号会和字符串定义中的单引号混淆,因此matlab中用两个单引号表示一个单引号,也就是
( P7 x. h4 l8 [7 W  C( w9 ?/ t' h. B& Q& V9 s
  • a=''''
    / `& [3 @8 W; Y3 m

! g( S/ r! a- h" \2 V1 c表示a是一个字符变量,值是一个单引号。语句中第一和第四个单引号是字符串类型的开头和结尾,中间两个单引号用来表示一个单引号。
/ _+ S+ ]( I! H  F* L

& E: m6 B; h% H  o* O    定义字符串变量后,workspace中出现相应的变量名,图像是方框里写了ch,双击后可以看到行列数。' a' `! k+ ~9 f# O

0 d1 ^4 P# l6 {4 @4 ?( I" N
5 E  u& a4 [4 I" q  E! L
! [7 W* S7 v8 s! a, u0 ?4 i# [7 F, M

% z3 w: O& a/ o& Y& ]$ R6 G
9 A' z# Y# c6 H' a
, ~+ ^2 {0 s' D1 O. m- f" z" O( L" O# T) Q# R& W3 i

' ?. G( f+ z  \4 @- U+ a
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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