Как распараллелить решение разреженных матриц с помощью mldivide - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь распараллелить решение x = A \ B (mldivide. Мои переменные: x = V (I * J * K x I * J * K), A = A (I * J * K xI * J * K) разреженная матрица, vec = u (I, J, K) + V / постоянная + Bswitch (I * J * K x I * J * K) * V

Для этого безраспараллеливание, мой код в настоящее время делает это:

V_stacked = reshape(V,I*J*L,1);
vec = u_stacked + V_stacked/Delta + Bswitch*V_stacked;
V_stacked = A\vec;

Для распараллеливания я попытался

u_stacked = reshape(u,I*J,L);
V_stacked = reshape(V,I*J,L);
BswitchTimesVstacked = Bswitch*reshape(V,I*J*L,1);
BswitchTimesVstacked = reshape(BswitchTimesVstacked,I*J,L);
vec = u_stacked + V_stacked/Delta + BswitchTimesVstacked;
tic
parfor l = 1:L 
    V_stacked(:,l) = A(:,:,l)\vec(:,l);
end

Но так как B все еще I * J * L раз I * J * L, это неработать. Я не уверен, что 1. что я делаю до сих пор правильно и 2. как правильно изменить форму B.

Математическая информация здесь: http://www.princeton.edu/~moll/HACTproject/two_asset_kinked.pdf (раздел 4)

Любая помощь высоко ценится: -)

...