此示例演示如何重新排列稀疏矩阵的行和列 , 从而影响矩阵操作的速度和存储要求 。
需要这些哦
matlab软件
电脑
方式/
1稀少矩阵的可视化 。
间谍图显示矩阵中的非零元素 。
这个间谍图显示了一个稀少对称正定矩阵 , 来自哈韦尔波恩测试矩阵“West0749”的一部门 , 该矩阵描述了在化工场中的衍射柱模子中的毗连 。
号令行键入:
load west0479.mat
A = west0479;
S = A * A' + speye(size(A));
pct = 100 / numel(A);
figure
spy(S)
title('A Sparse Symmetric Matrix')
nz = nnz(S);
xlabel(sprintf('nonzeros = %d (%.3f%%)',nz,nz*pct));
2按”Enter“键 。
如图1所示 。
文章插图
3计较乔尔斯基因子 。
此刻我们计较乔尔斯基因子L , 此中S=L*L‘ 。
注重 , L包含的非零元素比未分化的S要多得多 , 因为Cholesky因式分化的计较建立了“填充”非零 。
这减慢了算法的速度 , 增添了存储当作本 。
tic
L = chol(S,'lower');
t(1) = toc;
spy(L), title('Cholesky decomposition of S')
nc(1) = nnz(L);
xlabel(sprintf('nonzeros = %d (%.2f%%) time = %.2f sec',nc(1),nc(1)*pct,t(1)));
4按”Enter“键 。
如图2所示 。
文章插图
5从头排序以加速计较速度
经由过程从头排序矩阵的行和列 , 可以削减因因因式分化而发生的填充量 , 从而削减时候和存储当作本 。
我们此刻测验考试三种分歧的排序 , 由MATLAB撑持.
反标的目的切希尔-麦基
列计数
最低水平
利用反标的目的切希尔-麦基
SYMRCM号令利用反标的目的的Cuthill-McKee从头排序算法将所有非零元素移到对角线四周 , 从而削减了原始矩阵的“带宽” 。
号令行键入:
p = symrcm(S);
spy(S(p,p))
title('S(p,p) after Cuthill-McKee ordering')
nz = nnz(S);
xlabel(sprintf('nonzeros = %d (%.3f%%)',nz,nz*pct));
6按”Enter“键 。
如图3所示 。
文章插图
7因为Cholesky因式分化发生的填充被限制在带内 , 使得从头排序后的矩阵因式分化所需的时候更短 , 存储更少 。
号令行键入:
tic
L = chol(S(p,p),'lower');
t(2) = toc;
spy(L)
title('chol(S(p,p)) after Cuthill-McKee ordering')
nc(2) = nnz(L);
xlabel(sprintf('nonzeros = %d (%.2f%%) time = %.2f sec', nc(2),nc(2)*pct,t(2)));
8按”Enter“键 。
如图4所示 。
文章插图
9利用列计数
COLPERM号令利用列计数从头排序算法将非零计数更高的行和列移到矩阵的末从头至尾 。
号令行键入:
q = colperm(S);
spy(S(q,q)), title('S(q,q) after column count ordering')
nz = nnz(S);
xlabel(sprintf('nonzeros = %d (%.3f%%)',nz,nz*pct));
10按”Enter“键 。
如图5所示 。
推荐阅读
- 电脑版钉钉怎么下载直播视频
- 电脑版钉钉怎么查看直播数据
- matlab中如何表示“稀疏矩阵的图形“
- 魔兽世界8.3部落怎么前往纳沙塔尔
- 猫发情几天配种 母猫发情怎么解决
- 母猫发情怎么制止 主人应对母猫发情措施
- 猫跑了怎么办 猫丢失后的时间可分为3个阶段
- 如果被猫抓了怎么办 及时用浓肥皂水清洗伤口
- 猫老叫怎么办 首先需要判断小猫叫的原因
- 怎么才能让猫发情 如何让猫快速发情