我编写了下面的代码来反转上三角矩阵,避免任何可能的乘法/减法为零。它只是使用翻牌而不是翻牌。
function B = InvTrMat(A,n,type)
% This code inverts an upper triangular matrix of order n
% without doing any multiplication or subtraction by zero.
B = zeros(n);
for j = 1:n
B(j,j) = 1 / A(j,j);
for i = j-1:-1:1
for k = i+1:j
B(i,j) = B(i,j) - A(i,k) * B(k,j);
end
B(i,j) = B(i,j) * B(i,i);
end
end
return
end
问题是它比 Matlab 的反斜杠命令慢。我使用以下代码来测试和比较两者:
n = 128;
t = zeros(1,100);
u = zeros(1,100);
for i = 1:100
A = rand(n,n);
A = A+A';
A = A + n*eye(n);
R = chol(A);
tic;
B = R \ eye(n);
t(i) = toc;
tic;
B = InvTrMat(R,n,'u');
u(i) = toc;
end
sum(t)/100
sum(u)/100
有谁知道如何让我的代码比 Matlab 的代码更快?这一定是可能的,因为我只使用了其他代码中的一小部分触发器。
我的 Matlab 版本是 7.10.0 (R2010a),安装在 Windows 8.0 64 位 PC 上。
谢谢大家。