Verfasst am: 19.02.2014, 17:07
Titel: For Schleife vektorisieren
Hallo zusammen,
ich muss folgenden Code vektorisieren, da die Funktion bei einer Matrixgröße(sparse) von 17000*17000 etwa 10sec. braucht. Ich möchte jedoch mit viel größere Matrizen arbeiten.
Es wäre super wenn jemand mit helfen könnte den Code zu optimieren.
Der INPUT ist eine sparse Matrix A und ein Vektor BlockSize.
Es soll über alle Zeilen von 1:f iteriert werden.
Code:
function[erg,Affinv] = efAMGeDohrmann(MG,A,BlockSize)
f = BlockSize(1);
c = BlockSize(2);
b = BlockSize(3); % assume b is equal zero
N2 = f+c+b;
xIndex = [];
yIndex = [];
value = [];
coarse = Yc(Xc==i); % find all coarse neighbors
fine = Yf(Xf==i); % find all fine neighbors of the fine node
fineOfCoarse = Ycf(Xcf==i); % find all fine neighbors of coarse-nodes
exterior = unique([fine(:);fineOfCoarse(:)]);
coa = length(coarse);
ext = length(exterior);
Aff = A(i,i); %selection of the partition
Afc = (Vc(Xc==i))';
%Afc = A(i,coarse);
Acc = A(coarse,coarse);
S = Acc-Afc'*(1/Aff)*Afc;
if ext==0
xIndex = [xIndex;i*ones(coa,1)];
yIndex = [yIndex;coarse-f];
value = [value;(-(1/Aff)*Afc)'];
% erg(i,coarse-f) = -(1/Aff)*Afc;
AII = [Aff Afc; Afc' Acc];
if AII~=AII'
'VORSICHT AII nicht symmetrisch'
end else
Afx = A(i,exterior);
Nx = ones(ext,1);
Nc = ones(coa,1);
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.