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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
2 i  M# x$ w6 C0 P* A" J
matlab解决问题的最基本思路是建立脚本文件,那么脚本文件的第一段就是定义一些变量,这和C语言等编程思想是一样的。matlab提供的变量类型很多,最基础的是三种:数值变量、符号变量、字符串,其他的类型还有cell、table等。这里仅说明最基础的变量类型。% N3 e" k( O4 S3 P
: N4 z( @5 p; g' n% z+ h1 T8 \5 ~
1.数值变量
( t* v! g( ?7 S) P# I5 k
    matlab中所有的数值变量都是矩阵,赋值时,以方括号作为开头和结尾,以英文逗号或空格分割同行元素,以英文分号分割各列。例如在Command Window里输入
) m4 _4 \6 @' d1 u2 Z
5 j- ~% D4 O! Z4 N$ d' l+ za=[1 2;3 4]
2 M( B- t) R2 g6 z4 X/ v' h
1 D; J4 v' T4 @. q% O3 B) G. @( R
& p  B# S8 N# R4 Z4 p) F

# A, e' Y& ?) _' E/ J6 A. l+ h7 G! Z; I& x3 S7 D. A# {
可以看到运算结果,a是一个数值变量。同时workspace里出现一个田字形的变量a,说明变量a的类型是数值型。
" r  |, S$ B" q. C9 d5 [
- a1 o( L3 y9 F) a) l, p5 g
6 Q4 w$ U! ~7 P% ^0 F

+ ?4 Z2 P; u. V3 Z6 T向量和数字可以视为特殊的矩阵,例如
5 v! |9 v5 A$ D* f2 _& G' A& C: x# C) u, d# v& Z) q4 ?
a=[1 2]
8 i& k- v5 M  l- _8 Z( Z# c: I4 p6 h# g) l
a=[1;2]* O* |; ?# j: u+ _; \1 C( B% q
+ S4 |3 z$ X! ^( n- w! O
分别是行向量和列向量。4 y, q  P  A) E6 h: l( g
2 ~2 H% V6 y' Y0 s# Q# o% a% j7 Z* D
a=[1]  可以简写为a=1   是数字。
$ D! f! u# f# g& T) @/ {

) a8 ?+ E! b7 x8 G( I7 o8 S2 I    数值变量的命名要求是英文字母开头,不能包含特殊符号,大小写敏感。这里推荐采用下划线来进行分割,例如value_of_A,这和其他编程语言的命名规则大体相当。

0 U- M' e7 z, j  B$ w/ j! o, O3 e# c8 ^' I# t
    赋值中,有时需要用到等差数列,例如定义一个向量a=[1 2 3],如果比较长,赋值很麻烦,所以matlab提供了一个简单的方法' C5 a9 Z2 ^3 N# Z( \" s2 G  f+ F/ H

- q) ~( [# j; D, e( ^a=[1:1:3]9 u. _. O; [; c
9 \# n: d+ _' f& h( y  ~
这里两个冒号的意思是起始值:步长:终值。采用这种赋值方式时可以获得一个等差数列行向量,并可以省略两侧的方括号。当步长为1时,可以省略步长和一个冒号,于是可以简写为
1 _( n  R  k! P7 U! ^6 k. @) I5 \! E/ i
  • a=1:3
    # P7 _+ w6 |6 q3 l! L* \1 U: J

; z( {7 U% P: t7 L

% x$ H) i. u+ G5 X' }

: f6 c7 }; P* S( W! N1 U9 y
5 ?4 h7 ]5 T) {0 N# `; m5 L    另一种灵活的赋值方法是分块矩阵,其方法是变量名后面加圆括号,圆括号中加序号。例如2 }( b" y4 V5 y

$ O6 n- @4 c8 o  E, ~' la=[1 2;3 4]. j$ r. G* l& b1 R

) M9 [/ D$ |1 C, ^定义变量a之后,, x6 p% Z. U, u2 Z2 F8 W
% S( I: U0 \# s; {7 M1 Z  P6 ~& T
b=a(1,2)
( p1 P# g3 E3 W
  i+ O: P6 z5 _1 M  }就可以把a的第一行第二列元素赋值给b,当然也可以用6 e# N8 \" }+ B" o

* i6 z3 Z% L  Z! q1 Ea(1,2)=1
  y/ d. y) P8 `  h/ G% n
+ _* I9 P  U# M8 F来修改矩阵中部分元素的值。这里需要注意,序号必须是自然数,且不能是零。当矩阵中有多个元素需要赋值时,可以将序号部分改成向量,例如3 \; @! u2 V' h- x5 b2 t

/ [$ O" K0 y' m) `( v0 Wa([1 2],[1 2])=[1 2;3 4]
' H/ y5 b1 T2 X
  q0 i( L0 ?, Q9 u( i2 L, N中把行数和列数都用向量表示,就是说对矩阵a的第1和2行,第1和2列,总共4个元素赋值。更进一步,也可以有a([1 2],1)表示a的第一列,也可以写成
: x: e8 g6 \; `  ]0 Da(1:end,1)2 K1 @* S2 V" @5 `

+ m  u; G- |5 b$ W+ T5 M这里的end表示终点,即a的行数2,也可以更进一步简写成
9 X' \: p3 a+ n/ ]% T8 {  L& `3 Z" ^: H3 `. W# U% u6 |4 I% ?! J
a(:,1)
5 G$ w* N4 {1 P' C% e4 `" E4 T4 @" D# O5 Z2 g% q
这里的冒号表示从头至尾。这类赋值方法最为常用,但基本的语法非常简单,方括号表示矩阵开头和结尾,圆括号表示从矩阵中选取部分,把握这个原则,有利于读懂程序。
! V2 V/ O2 |9 f. f+ X2 d
0 r0 b1 C  o+ b( r
    当然分块矩阵也可以
' o0 ]( T, P: Y9 A3 z7 Y" k9 S: j/ H  ?! C* a$ B
b=[a a]8 y7 D7 V8 E3 O

# `  N7 T5 i& N$ w. _这样的赋值方法,但需要注意的是,方括号中的元素必须满足矩阵的行列数要求,例如
1 e' y: x. j" F* i! j$ E* q' b! q8 x% n4 S
a=[1 1]- i/ N" A6 E% P) i3 V* [3 G

  t+ f. L8 ~4 G  ^9 k7 pb=[1;1]
/ ]" ?0 ~2 K" B* G
( s' x- {8 y+ v( T9 V) q, qc=[a b]5 o9 p5 \3 l) j9 D' ~
7 o0 y' t# Z9 N" M5 S9 d1 }7 J
就会引起错误,因为此时matlab无法确定c的行列数。
( L+ m% W. r% f' Y! w5 j# `
1 `$ y3 w( r1 p, y/ C  w
2.符号变量

2 S4 m  P# H  m  A# g7 c2 ^& e. x' Q& S# s( ^' K( l2 g9 ]
    总体而言,符号变量比数值变量简单得多,因为变化非常少,常用的赋值命令是
5 A8 L" W  W+ K% e
  f9 R: x' c( y- asyms a b8 T. q% {3 b2 D) r* O6 P
2 y) D% ^$ m6 N% J
syms表示这里要定义一些符号变量,a和b是变量名,符号变量的命名规则和数值变量一样。有时候也采用. L/ f7 k0 I7 _' Z* F
9 a6 m- q/ V. N% t5 K2 y
syms a real
6 h% v3 D1 r0 m% i% i6 z. K& Y* ^3 a* X" i: l" v# P' ?, [/ N
来强调a是实数变量,具体可以doc syms来获得帮助。

. i# X) N9 U6 T7 P) x9 l4 z9 Z" C4 q& N6 ^6 X3 Q. A, i
    有些变量之间存在依赖关系,此时可以定义
5 A8 N/ {8 m- K. Z' x& B; l  q
/ H+ t( F# G# s: m7 a" csyms x y(x)$ c! S# V. c2 t; X6 ~0 m! T
$ p) ^) P; @/ h. f+ J+ {
这里声明x是一个符号变量,又声明y是一个符号变量,且y的值由x决定,这相当于数学中函数的概念。当然具体的函数关系并没有明确规定。也可以
/ X( E" ?2 \0 R4 g2 _6 T$ ~% A9 q
syms x y z(x,y)' A- Y+ `8 K) N4 r3 {2 i' U6 Z
3 k1 u0 f7 r1 l: ^" O
来定义符号变量z,z依赖x和y。这相当于二元函数的概念。这里的圆括号显然和数值变量中的圆括号含义完全不同,这也是学习matlab最不习惯的地方,同一个符号,由于变量类型不同会有完全不同的含义。所以在学习matlab的过程中,一定要区分数值变量和符号变量。9 f  g4 T' X5 X7 ~0 \* N
9 P' |6 H. I( A2 o+ d

: r" ?5 F% b( J7 b+ w9 z    上述方法定义的符号变量是一个数,或者1*1矩阵,matlab中也可以定义符号矩阵,例如) ^4 C; o2 W# {- o- u5 t

5 b7 H: o: K# g% @syms a11 a12 a21 a220 e: V5 p- _- T8 b

" G4 a  ^) ?8 j' H6 f0 KA=[a11 a12;a21 a22]
9 Y, L( h6 x2 @9 \: O1 X5 n. y0 }( Z& i
就可以获得一个矩阵符号变量A。
8 f  j8 J5 F' T

; M2 O! o' [$ E  定义符号变量后,workspace中出现相应的变量名,图形不是数值变量的田字形,而是方框里有个立方体,双击后可以看到行列数。
! d( ~) ^: ?+ }( S2 t$ A' r" P; [& {, L7 u! g7 b* ]) Q2 b
1 u' v& O( F  Y/ ?7 i, Z" g9 `
1 {6 F/ F  W+ `  w
3.字符串

3 t: [  k( j7 g' a1 z- s
0 r  X8 [' K! [3 J/ |7 F% h    比数值、符号更为简单的就是字符串了,其定义方法是以单引号开头和结尾,例如
- U- q. T' h+ w8 B( j" ~2 n" @, ^- j- q4 w" A
a='hello world'
# f6 Z; u6 v0 x, I  o
! [( S( i  u( t, b) i就定义了一个字符串a,其值为你好世界。matlab中较为特殊的是,字符串可视为行向量,例如
0 J" s. M' D! @. G& @, [9 t
% I) h; s6 [; s
  • b='hello '
  • c='world'
  • a=[b c]/ q0 G5 T0 `% n1 z1 S" g( H
9 a, }& `" U3 {

6 E* A) o- b2 i! z/ q& w也可以获得字符串a,其值为你好世界。另外,有时也可以将字符串视为矩阵,例如
  K6 R; U" e' d2 |
( X3 X4 I+ @  C4 K5 f% S3 {: F% oa=['ab';'cd']
; ?4 g* J( n! f
0 e, |0 j7 S+ e$ W' I0 n* f; Q& M* q但这种用法很罕见,同时要求各行字符串长度一样,否则将违反矩阵行列数规定。

9 A* t+ s1 Q' \" U% I. T# P9 G9 A+ o! p! e- }
    当然字符串的值也可以是特殊符号,比如  V4 Y. W" u/ ~) u+ q" F: U
6 U$ t( l- V7 m! l2 N
  • ',8 I* U7 C6 m; U

8 H2 c) h  l6 c9 u就定义了逗号,而最特殊的就是定义单引号,因为单引号会和字符串定义中的单引号混淆,因此matlab中用两个单引号表示一个单引号,也就是
7 F; C9 {: t  h  d2 H5 z, L. o
! ?+ Y! W5 @. n; A% k4 t
  • a=''''  ~, ?% S/ X* k1 R  q+ d7 C

+ n: V6 K5 g6 }表示a是一个字符变量,值是一个单引号。语句中第一和第四个单引号是字符串类型的开头和结尾,中间两个单引号用来表示一个单引号。

+ j$ a+ q- E! t. n
2 k" f4 v, `# ~9 V* ^' k    定义字符串变量后,workspace中出现相应的变量名,图像是方框里写了ch,双击后可以看到行列数。8 z9 K+ _9 D, c* k
# K  x3 t% X8 t+ v/ i3 N

7 w+ K# \2 [/ T0 Y' r" U0 |! M8 Q/ E# S' H. h

( m) n/ V1 C* @' T5 v8 U
* V% G- A( G5 P1 K
) X8 O0 }" M4 a' X
. T, j1 ]/ i" z) c, [  b. H4 t% y" @- Q" P# ]7 J, j* n6 o
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-7 01:25 , Processed in 0.093750 second(s), 26 queries , Gzip On.

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

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

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