【发布时间】:2015-09-27 01:32:23
【问题描述】:
我对 matlab 还很陌生,正在尝试理解矢量化。我通常能够找到一种方法来矢量化我的代码,但这次不同。请注意, e() 和 f() 不是函数调用,而是数组, a(i,j) 是一个矩阵。这里的问题是 e(i) 的值取决于 e(i-1) 的值。同样的事情也发生在 f(i) 上。有没有办法对这个循环进行矢量化以提高速度?
该函数采用 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) 还是只需要最后一个感兴趣的值?
-
@m.s.:我看不到在这里应用该解决方案的可能性。认为这是一个不同的问题。
-
@Daniel 我只需要 e(i) 和 f(i) 的最后一个值!
-
@Fredaugermorin,对不起,删除了我的答案。它假定您使用右侧的 old 值。但这正是您的问题:下一点您需要 new
e和f。我不确定它是否可以被矢量化......
标签: matlab optimization vectorization