EDA365电子论坛网

标题: 在Matlab矩阵中常用的一些操作 [打印本页]

作者: pulbieup    时间: 2019-10-23 09:36
标题: 在Matlab矩阵中常用的一些操作
本帖最后由 pulbieup 于 2019-10-23 19:14 编辑 ' p, a5 n7 h  o. Q- [2 ~  Q' }
( D' J# {) C. x
一、矩阵的表示: j8 V4 ?& ~7 o# ]5 V/ C

0 A. d; t0 F9 w; t( v5 e
7 _0 _/ N: [) T# Y( e
在MATLAB中创建矩阵有以下规则:
* R% O6 l& [) j5 l* g: A, s5 ?: {% L; O/ L$ V/ J

! X( w5 F5 l% c6 Z% Oa、矩阵元素必须在”[ ]”内;' J1 J5 n! F- R, [+ z/ m$ y/ q& G8 X
. Q) a% w7 Y- G: X! U) W, X0 S
5 M+ Z! [! @' Y+ F* z6 E
b、矩阵的同行元素之间用空格(或”,”)隔开;
2 v6 }" h- s2 }& Y
  a* a/ A$ G- b2 }) Y6 \- O" H" H
7 G2 n+ O2 E& B5 `/ |
c、矩阵的行与行之间用”;”(或回车符)隔开;
4 j2 d$ K9 n9 H! {# G8 A' E' n, N1 C& C" n
% S2 C$ m5 G: J- f; k( x
d、矩阵的元素可以是数值、变量、表达式或函数;
. `! m/ l& h& W/ j
* ]" j) o4 `: T! q- K+ u
' X4 L/ B  O  ?, q
e、矩阵的尺寸不必预先定义。
4 z) I( j# |6 E6 Q: y. z( E+ w1 B5 m% Z3 S5 o

( W# \" I% s: e# i6 i二,矩阵的创建:
9 S& B, }- b% N( J$ M
+ y) ]5 l( p7 e& `- x9 n
: k/ k! ?; F7 E* c; h- P
1、直接输入法' f6 q& p6 h/ J7 W* P

, S2 Z2 T, e/ l% [
3 g# y+ {) N' S# V) h
最简单的建立矩阵的方法是从键盘直接输入矩阵的元素,输入的方法按照上面的规则。建立向量的时候可以利用冒号表达式,冒号表达式可以产生一个行向量,一般格式是: e1:e2:e3,其中e1为初始值,e2为步长,e3为终止值。还可以用linspace函数产生行向量,其调用格式为:linspace(a,b,n) ,其中a和b是生成向量的第一个和最后一个元素,n是元素总数。
' Z5 d- b: J$ |* Y2 T
, F0 W! G' J4 ?& f  C9 b1 X2、利用MATLAB函数创建矩阵$ y# M4 H' W  n; p
( t9 `  z5 Z' W! k, r
& S/ A' p7 i) a/ G) f3 p# ?
基本矩阵函数如下:( ?1 [! s. y5 M+ s" n+ J  |
# p- c; Y" j* O1 G0 s3 }5 V+ g: s
2 h; l2 R$ g7 e3 D1 p. b7 B
(1) ones()函数:产生全为1的矩阵,ones(n):产生n*n维的全1矩阵,ones(m,n):产生m*n维的全1矩阵;
# X6 Z- t7 d% ?0 O2 }, p; m
7 b+ U3 K' M0 M* f# N# x# i0 d3 f
6 c2 m3 D; I0 |
(2) zeros()函数:产生全为0的矩阵;
8 a% Q8 V3 R' x5 s' D1 B8 N+ ~2 g( u) M

6 Y7 n5 T/ J: N$ q; w8 Y# W(3) rand()函数:产生在(0,1)区间均匀分布的随机阵;
8 x# v; U) d. J+ H& z0 z( O; h, ]4 h% S$ L1 n7 j
4 l; ~, b& x. i$ Z8 [
(4) eye()函数:产生单位阵;
* v6 l# d3 J2 f! R$ c) h; I1 z! y4 J/ b2 n
$ s9 I7 R+ X8 Y3 {
(5) randn()函数:产生均值为0,方差为1的标准正态分布随机矩阵。
1 k/ ~$ V% M; K& u
4 E9 W; S; r& @  s6 P6 U* P! }+ {" |8 ]

% S2 L' G& j0 c% `+ g, f; v4 t3、利用文件建立矩阵
# q4 l9 Y8 w( A5 W6 a6 Y+ N* ^1 Y4 n. A( h2 e% h9 ^1 a3 T& K, S

* X1 c! Z6 r: s) n当矩阵尺寸较大或为经常使用的数据矩阵,则可以将此矩阵保存为文件,在需要时直接将文件利用load命令调入工作环境中使用即可。同时可以利用命令reshape对调入的矩阵进行重排。reshape(A,m,n),它在矩阵总元素保持不变的前提下,将矩阵A重新排成m*n的二维矩阵。
& N$ \6 |# Z5 m) W+ U- r6 _/ w, s0 t

# q" x7 l5 h7 W% {, K三、矩阵的简单操作. d: L; _. }4 @9 c# i2 b
9 L* K. |" d- P7 U0 y" n- i
  v$ v4 v7 u6 q  Q: \  X" r
1.获取矩阵元素
2 @0 O% ^. P& x- }( b4 n8 Q! ^/ A/ Q! l" J& \! g, V- B
: t' W: }1 ?3 v( W$ K
可以通过下标(行列索引)引用矩阵的元素,如 Matrix(m,n)。
1 A( g9 G: }. [
: K9 H$ }2 R; L$ C- M( D' p' {

' M7 a  g7 U3 j4 X2 ~也可以采用矩阵元素的序号来引用矩阵元素。
* v2 l( G7 C' R# P% @3 G) G, e' F  e1 h! N3 `

: H* S) c: m( C) S! Z矩阵元素的序号就是相应元素在内存中的排列顺序。4 {/ G! B+ F- C" y

4 \- X% j  i; _6 r/ w0 s! e& r

! t( t4 q" m& w8 e在MATLAB中,矩阵元素按列存储。: I" E& ]9 `& O% }9 T+ n8 s, h
( \' n; d4 ~0 z6 b& V1 {8 o
+ V. k$ I' p& v, p7 z9 p
序号(Index)与下标(Subscript )是一一对应的,以m*n矩阵A为例,矩阵元素A(i,j)的序号为(j-1)*m+i。
8 U; s9 G5 M8 s  a0 S$ E* q% a0 N1 v7 x/ P5 ?

* N2 m4 X% Y" x1 h% \1 G% W7 h% `其相互转换关系也可利用sub2ind和ind2sub函数求得。
  w% Q: [* b1 u& h& L/ e
. |2 M" \: H0 Y) A

" R& n: M9 |  P2.矩阵拆分
6 w1 E% [. v2 \5 S; c$ y( C3 L  z- P" O+ I8 T
3 q1 e8 W& v, q: O9 F
利用冒号表达式获得子矩阵:: A; d; m" S- I5 L! W
4 U% a! Q4 [) U. Y6 \, ~) w
- D3 p  e& k" _4 |2 `- V
(1) A(: ,j)表示取A矩阵的第j列全部元素;A(i,: )表示A矩阵第i行的全部元素;A(i,j)表示取A矩阵第i行、第j列的元素。& D# L8 y0 B8 t, j; _

4 ~$ v8 [. T; ]. M

1 m$ |$ s+ f6 d0 |(2) A(i:i+m,: )表示取A矩阵第i~i+m行的全部元素;A(:,k:k+m)表示取A矩阵第k~k+m列的全部元素,A(i:i+m,k:k+m)表示取A矩阵第i~i+m行内,并在第k~k+m列中的所有元素。此外,还可利用一般向量和end运算符来表示矩阵下标,从而获得子矩阵。end表示某一维的末尾元素下标。
9 g5 o& V* W' L/ V. l, n
  }2 N& ^& j( g* P9 u0 W7 x
5 L2 y' y: Z) j: k
利用空矩阵删除矩阵的元素:) R: |5 m4 ~- W0 m
# I% K: Q5 S0 q. O  K

+ Q, a: r# B0 q4 o' [9 E在MATLAB中,定义[]为空矩阵。给变量X赋空矩阵的语句为X=[]。注意,X=[]与clear X不同,clear是将X从工作空间中删除,而空矩阵则存在于工作空间中,只是维数为0。* D  d$ r( U1 i; U6 j

" s9 A# Z: F/ R. c* m7 r$ h+ P0 U
1 Q; k2 @, m/ E  o4 J# ?: B
3、特殊矩阵
, w8 L& D/ @4 n8 X: M
# ~" m* u% z5 F0 v
/ a6 J# J$ m+ H, d- a
& o3 m3 C2 T3 D" L! Z6 K1 h/ g7 N9 r

+ @7 }. D/ F( @' Q" v) Y9 ?' q; O9 ^' ?) w$ G; R
7 B: M# A) o% |/ d: G$ W- Q

& d: @, `% j9 G  f6 D
作者: kinidrily    时间: 2019-10-23 19:14
看看




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2