我對matlab非常新,並且試圖理解矢量化。我通常能夠找到一種向量化我的代碼的方法,但這次是不同的。請注意,e()和f()不是函數調用,而是數組,a(i,j)是一個矩陣。這裏的問題是e(i)的值取決於e(i-1)的值。 f(i)也會發生同樣的情況。有沒有一種方法來加速這個循環以獲得速度?自我依賴MATLAB循環的矢量化
該函數取A三對角矩陣,b Ax = b線性系統的解,sol輸出:系統的解。該代碼的工作原理,我只是想盡可能快地使它更快。希望額外的細節幫助。
function [sol] = MySolTridiagDirect(A,b)
%Adds 2 slack variables
a = [zeros(size(A,1),1),A,zeros(size(A,1),1)];
%Adds solutions to slack variables
b = [zeros(1,size(b,2));b;zeros(1,size(b,2))];
e = NaN(size(A,1)+1,1);
f = NaN(size(A,1)+1,1);
x = NaN(size(A,1)+1,1);
e(1) = 0;
f(1) = 0;
x(1) = 0;
for i=2:size(f,1)
e(i) = (-a(i-1,i+1))/(a(i-1,i-1)*e(i-1,1) + a(i-1,i));
f(i) = (b(i) - a(i-1,i-1)*f(i-1))/(a(i-1,i-1)*e(i-1,1) + a(i-1,i));
end
%% Solver for variable 'x' (solution)
x(end) = f(end);
for i=size(f,1)-1:-1:2
x(i) = e(i)*x(i+1) + f(i);
end
sol = x(2:end,:);
end
你需要所有的值e(i)和f(i)還是隻是最後一個感興趣的值? – Daniel
[在matlab中向量化遞推方程]可能的副本(http://stackoverflow.com/questions/30367100/vectorizing-a-recurrence-equation-in-matlab) –
@ms:我看不到有可能應用那裏的解決方案。認爲這是一個不同的問題。 – Daniel