EDA365电子论坛网
标题:
Matlab 矩阵的应用
[打印本页]
作者:
uqHZau
时间:
2021-8-18 11:19
标题:
Matlab 矩阵的应用
# ?0 B; X1 a% @" H) j
一、稀疏矩阵
: {! \- Q3 E6 X3 g+ b' D! A
+ f- j8 V8 M$ W1 ?8 X* {
对于一个 n 阶矩阵,通常需要 n2 的存储空间,当 n 很大时,进行矩阵运算时会占用大量的内存空间和运算时间。在许多实际问题中遇到的大规模矩阵中通常含有大量0元素,这样的矩阵称为稀疏矩阵。Matlab支持稀疏矩阵,只存储矩阵的非零元素。由于不存储那些”0″元素,也不对它们进行操作,从而节省内存空间和计算时间,其计算的复杂性和代价仅仅取决于稀疏矩阵的非零元素的个数,这在矩阵的存储空间和计算时间上都有很大的优点。
/ ]( }8 W/ k* ]
矩阵的密度定义为矩阵中非零元素的个数除以矩阵中总的元素个数。对于低密度的矩阵,采用稀疏方式存储是一种很好的选择。
0 E1 h" i8 _* b, g0 P$ g& I
o3 s- O6 D7 m4 M7 \
1、稀疏矩阵的创建
2 g7 _3 W- `% B% V0 Q7 i
(1) 将完全存储方式转化为稀疏存储方式 函数A=sparse(S)将矩阵S转化为稀疏存储方式的矩阵A。当矩阵S是稀疏存储方式时,则函数调用相当于A=S。 sparse函数还有其他一些调用格式: sparse(m,n):生成一个m*n的所有元素都是0的稀疏矩阵。 sparse(u,v,S)--:u,v,S是3个等长的向量。S是要建立的稀疏矩阵的非0元素,u(i)、v(i)分别是S(i)的行和列下标,该函数建立一个max(u)行、max(v)列并以S为稀疏元素的稀疏矩阵。 此外,还有一些和稀疏矩阵操作有关的函数。full(A):返回和稀疏存储矩阵A对应的完全存储方式矩阵。
/ ]* r1 `2 ?. }# G( B' E. `
(2) 直接创建稀疏矩阵 S=sparse(i,j,s,m,n),其中i 和j 分别是矩阵非零元素的行和列指标向量,s 是非零元素值向量,m,n 分别是矩阵的行数和列数。
: I5 Y" C; V8 R9 |6 i
(3) 从文件中创建稀疏矩阵 利用load和spconvert函数可以从包含一系列下标和非零元素的文本文件中输入稀疏矩阵。例:设文本文件 T.txt 中有三列内容\begin{bmatrix}1\; 3 \; 5\\ 2 \; 4 \; 6\\ 2 \; 5 \; 8\\ 3 \; 6 \; 9\end{bmatrix},第一列是一些行下标,第二列是列下标,第三列是非零元素值。load T.txt S=spconvert(T)。
$ j( ~ A% w# }- m% H) o1 [0 i1 N
(4) 稀疏带状矩阵的创建 S=spdiags(B,d,m,n) 其中m 和n 分别是矩阵的行数和列数;d是长度为p的整数向量,它指定矩阵S的对角线位置;B是全元素矩阵,用来给定S对角线位置上的元素,行数为min(m,n),列数为p 。
' f9 l. }; s- ]3 m3 a6 _
(5) 其它稀疏矩阵创建函数
: m( O3 u/ b* t
S=speye(m,n)
$ t1 K( t1 V4 k0 x: b
S=speye(size(A)) % has the same size as A
. v4 @5 ^2 D, U0 B
S=buchy % 一个内置的稀疏矩阵(邻接矩阵)
* K8 I/ D' w4 K% m' S5 R& M" A
等等
) ~2 j4 a9 d* S
0 G$ @ H% v% g% ]8 k6 D1 v3 ]; z
2、稀疏矩阵的运算
1 p+ r9 S3 {' b, o' k
, X! e$ d M" o8 {1 B" L
稀疏存储矩阵只是矩阵的存储方式不同,它的运算规则与普通矩阵是一样的,可以直接参与运算。所以,Matlab中对满矩阵的运算和函数同样可用在稀疏矩阵中。结果是稀疏矩阵还是满矩阵,取决于运算符或者函数。当参与运算的对象不全是稀疏存储矩阵时,所得结果一般是完全存储形式。
/ Q$ X+ S4 W0 v) K' k8 L% ^
, @! Y/ t4 v( E, w& T/ S: i
3、其他
8 ]8 \! Y: ]4 M* ]' }9 k
1 \- h! V1 G" ~3 ~
(1) 非零元素信息
4 y6 F0 b/ M4 ?
nnz(S) % 返回非零元素的个数
/ g4 ?+ F7 h5 P7 e$ H
nonzeros(S) % 返回列向量,包含所有的非零元素
; l4 b7 h0 E$ e: }! D3 a- `! K* ]. q) r' w
nzmax(S) % 返回分配给稀疏矩阵中非零项的总的存储空间
- ^) @. K+ x5 n$ }$ ^+ Z; t. w
(2) 查看稀疏矩阵的形状 spy(S)
+ n7 P7 B4 o& d# W1 e
(3) find函数与稀疏矩阵
' y" z k$ {5 S4 s2 F* T0 |: v9 n
[i,j,s]=find(S)
0 E b$ f- \8 ]
[i,j]=find(S)
# R4 `, G" U5 t4 v$ i4 b& y
返回 S 中所有非零元素的下标和数值,S 可以是稀疏矩阵或满矩阵。
% ]* @" d, D* l5 q
# X) E+ R1 H2 T( R$ r0 ?
二、有限域中的矩阵
/ [( \7 }' c Z5 g& _) |/ S
' E7 t3 V- u( I) i
信道编码中的矩阵运算一般都是基于有限域的,因此需要将普通矩阵转换为有限域中的矩阵,使其运算在有限域GF(m)中。可以通过命令gf(data,m)将数据限制在有限域中,这样如矩阵求逆、相加、相乘等运算就均是基于有限域GF(m)的运算了。
) T3 K' Q0 I) T5 ^3 b' O J4 F, p/ h
% @& { I3 O. u2 q& [+ `# F, |
那么如何将有限域元素转换为double型的呢?可以利用命令 double(data.x) 其中x是后缀。关于有限域的详细情况请参考 这里。
, W- A8 x E% X2 ~& G3 M0 I
1 ~" u# Z5 V9 C3 \# T
6 D# l$ b2 p. @& n
解决方法:用\;代替&。估计这个问题是Latex Math插件的bug。呵呵,不知道有没有更好的解决办法。
作者:
SsaaM7
时间:
2021-8-18 13:14
Matlab 矩阵的应用
作者:
greensmile
时间:
2021-8-18 13:52
稀疏存储矩阵只是矩阵的存储方式不同,它的运算规则与普通矩阵是一样的,可以直接参与运算
作者:
ExxNEN
时间:
2021-8-18 13:52
矩阵的密度定义为矩阵中非零元素的个数除以矩阵中总的元素个数
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2