【发布时间】:2015-04-15 19:21:19
【问题描述】:
我有一个代码在循环中重复计算稀疏矩阵(准确地说,它执行此计算 13472 次)。这些稀疏矩阵中的每一个都是唯一的。
每次执行后,它将新计算的稀疏矩阵添加到原来的稀疏零矩阵中。
当所有 13742 个矩阵都添加完毕后,代码退出循环,程序终止。
代码瓶颈出现在添加稀疏矩阵中。我制作了一个虚拟版本的代码,它与我的真实代码表现出相同的行为。它由一个 MATLAB 函数和下面给出的脚本组成。
(1)生成稀疏矩阵的函数:
function out = test_evaluate_stiffness(n)
ind = randi([1 n*n],300,1);
val = rand(300,1);
[I,J] = ind2sub([n,n],ind);
out = sparse(I,J,val,n,n);
end
(2) 主脚本(程序)
% Calculate the stiffness matrix
n=1000;
K=sparse([],[],[],n,n,n^2);
tic
for i=1:13472
temp=rand(1)*test_evaluate_stiffness(n);
K=K+temp;
end
fprintf('Stiffness Calculation Complete\nTime taken = %f s\n',toc)
我对稀疏矩阵运算不是很熟悉,所以我可能在这里遗漏了一个关键点,这可能会大大加快我的代码速度。
我是否在代码中以合理的方式处理刚度矩阵的更新?是否有另一种方法可以让我使用 sparse 来获得更快的解决方案?
下面还提供了探查器报告:
【问题讨论】:
-
您需要 13742 个临时矩阵还是它们的总和?
-
中只需要总和。
标签: matlab sparse-matrix