У меня есть код, который многократно вычисляет разреженную матрицу в цикле (он выполняет этот расчет 13472 раза, если быть точным). Каждая из этих разреженных матриц уникальна.Самый быстрый способ добавить несколько разреженных матриц в цикле в MATLAB
После каждого исполнения он добавляет вновь вычисленную разреженную матрицу к исходной нулевой матрице.
Когда все матрицы 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)
Я не очень хорошо знаком с редкими матричных операций, так что я может быть здесь отсутствует критическая точка, которая может значительно ускорить мой код.
Я обрабатываю обновление моей матрицы жесткости разумным образом в своем коде? Есть ли другой способ, которым я должен использовать разреженный, что приведет к более быстрому решению?
Отчет профайлер также приводится ниже:
ли вам нужно 13742 временных матрицы или только их сумма? – knedlsepp
Требуется только сумма. – Kobs