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

Matlab 矩阵的应用

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-8-18 11:19 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

EDA365欢迎您登录!

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

x
1 E% A3 r! ~3 e2 r/ `
一、稀疏矩阵
8 t# v( _0 w$ [0 W" \3 z* ^' S: q; d! f
对于一个 n 阶矩阵,通常需要 n2 的存储空间,当 n 很大时,进行矩阵运算时会占用大量的内存空间和运算时间。在许多实际问题中遇到的大规模矩阵中通常含有大量0元素,这样的矩阵称为稀疏矩阵。Matlab支持稀疏矩阵,只存储矩阵的非零元素。由于不存储那些”0″元素,也不对它们进行操作,从而节省内存空间和计算时间,其计算的复杂性和代价仅仅取决于稀疏矩阵的非零元素的个数,这在矩阵的存储空间和计算时间上都有很大的优点。  i$ E0 R; J9 W" q! I8 M4 R
矩阵的密度定义为矩阵中非零元素的个数除以矩阵中总的元素个数。对于低密度的矩阵,采用稀疏方式存储是一种很好的选择。8 j7 K- l6 L# r* }9 m, {/ c1 Q

7 X& P6 I6 U( r, C1、稀疏矩阵的创建' d& ]% d: T" J+ R$ p( v( G$ m( J) q
(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对应的完全存储方式矩阵。
" Z$ }. V# E! \$ z* y6 [(2) 直接创建稀疏矩阵 S=sparse(i,j,s,m,n),其中i 和j 分别是矩阵非零元素的行和列指标向量,s 是非零元素值向量,m,n 分别是矩阵的行数和列数。
+ m! O; t, q; y  R. r* {/ m(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)。
- B1 }' b4 V5 K2 o4 V5 {(4) 稀疏带状矩阵的创建 S=spdiags(B,d,m,n) 其中m 和n 分别是矩阵的行数和列数;d是长度为p的整数向量,它指定矩阵S的对角线位置;B是全元素矩阵,用来给定S对角线位置上的元素,行数为min(m,n),列数为p 。& s% m# ^& i8 m1 ]" ?9 c2 [+ Y& @
(5) 其它稀疏矩阵创建函数+ F, W  K& T. g' \. t
S=speye(m,n)8 d/ r# f( f2 ~: H+ X
S=speye(size(A)) % has the same size as A
0 Q" |# f- T' f, ]9 iS=buchy % 一个内置的稀疏矩阵(邻接矩阵)( Z2 r+ \7 O9 }/ p$ d6 f: W* a
等等0 J; }$ M7 A+ V, S% \) N+ T6 K
9 h) ~/ \* X) O9 S* _
2、稀疏矩阵的运算
( c- Q% D4 N6 x3 N7 g' U1 z" R
, {' Q, s$ H2 R$ J+ y/ Y% c+ x! N稀疏存储矩阵只是矩阵的存储方式不同,它的运算规则与普通矩阵是一样的,可以直接参与运算。所以,Matlab中对满矩阵的运算和函数同样可用在稀疏矩阵中。结果是稀疏矩阵还是满矩阵,取决于运算符或者函数。当参与运算的对象不全是稀疏存储矩阵时,所得结果一般是完全存储形式。# O9 W5 Q7 F& _# }! l
0 J. P; M7 M" s! i- i) N! N3 l; q% P
3、其他
) Z; ?* M: F( T! }. x3 u
8 |- Y/ K+ ?, ^/ ^) u  V) T(1) 非零元素信息
" J7 G. M! v' ~- d4 Q: C* ]1 f: snnz(S) % 返回非零元素的个数3 K' d2 C. `+ Z6 r6 N
nonzeros(S) % 返回列向量,包含所有的非零元素# b9 J5 z5 ~8 {- g
nzmax(S) % 返回分配给稀疏矩阵中非零项的总的存储空间
3 _9 z! ~3 Y, ?' C  ]+ L; R(2) 查看稀疏矩阵的形状 spy(S)7 C" L5 |' _: ^- E! N) C1 p0 I
(3) find函数与稀疏矩阵" k8 l8 o' ~# B4 n: K" F3 t
[i,j,s]=find(S)' u9 g5 z2 D/ K2 I6 H
[i,j]=find(S)
( s! B3 B, M* ^% z" y  e返回 S 中所有非零元素的下标和数值,S 可以是稀疏矩阵或满矩阵。
0 M2 E2 R/ `+ u3 _/ R* L) z* b$ W" _$ L- ^0 X" y
二、有限域中的矩阵
; S) {0 Z3 H% X3 ^& G+ S. G0 T" b, U( d& ]. B2 p9 F
信道编码中的矩阵运算一般都是基于有限域的,因此需要将普通矩阵转换为有限域中的矩阵,使其运算在有限域GF(m)中。可以通过命令gf(data,m)将数据限制在有限域中,这样如矩阵求逆、相加、相乘等运算就均是基于有限域GF(m)的运算了。
- E9 V# V; \7 s- n9 r9 R6 I" K9 E' T% Q4 S- i& e
那么如何将有限域元素转换为double型的呢?可以利用命令 double(data.x) 其中x是后缀。关于有限域的详细情况请参考 这里。" M4 O3 u" n8 ]3 N, C/ Z# u

/ L0 N2 X+ n3 t' M5 Y5 {! [! s1 F1 M2 k
解决方法:用\;代替&。估计这个问题是Latex Math插件的bug。呵呵,不知道有没有更好的解决办法。

该用户从未签到

4#
发表于 2021-8-18 13:52 | 只看该作者
矩阵的密度定义为矩阵中非零元素的个数除以矩阵中总的元素个数

该用户从未签到

3#
发表于 2021-8-18 13:52 | 只看该作者
稀疏存储矩阵只是矩阵的存储方式不同,它的运算规则与普通矩阵是一样的,可以直接参与运算

该用户从未签到

2#
发表于 2021-8-18 13:14 | 只看该作者
Matlab 矩阵的应用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-23 23:52 , Processed in 0.140625 second(s), 24 queries , Gzip On.

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

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

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