我认为从技术上讲,您不会在非常优化的 Matlab 例程上获得加速,但是如果您了解它是如何解决的,那么您可以只解决 x 的一部分。例如,在传统求解器中,following. 使用 backsub 进行 QR 求解。在 LU 解决方案中,您同时使用后子和前子。我可以得到卢。不幸的是,由于它如何解决它,它实际上从最后开始。对于将同时使用两者的 LDL 也是如此。这并不排除这样一个事实,即可能有更有效的方法来解决你所拥有的任何问题。
function [Q,R] = qrcgs(A)
%Classical Gram Schmidt for an m x n matrix
[m,n] = size(A);
% Generates the Q, R matrices
Q = zeros(m,n);
R = zeros(n,n);
for k = 1:n
% Assign the vector for normalization
w = A(:,k);
for j=1:k-1
% Gets R entries
R(j,k) = Q(:,j)'*w;
end
for j = 1:k-1
% Subtracts off orthogonal projections
w = w-R(j,k)*Q(:,j);
end
% Normalize
R(k,k) = norm(w);
Q(:,k) = w./R(k,k);
end
end
function x = backsub(R,b)
% Backsub for upper triangular matrix.
[m,n] = size(R);
p = min(m,n);
x = zeros(n,1);
for i=p:-1:1
% Look from bottom, assign to vector
r = b(i);
for j=(i+1):p
% Subtract off the difference
r = r-R(i,j)*x(j);
end
x(i) = r/R(i,i);
end
end