运行这段程序:
function [m, s, u] = tri_diags(N)
i = (1:N)';
m = 4 + sin(i); % 主对角线
s = -1 + 0.01*cos(i(1:N-1)); % 次对角线(长度 N-1)
u = -1 + 0.01*sin(i(1:N-1)); % 超对角线(长度 N-1)
end
[m, s, u] = tri_diags(N); % 三条对角线的值(确定性,不用 rng)
B = [ [s(:); 0], m(:), [0; u(:)] ];
for r = 1:reps
tic; A1 = spdiags(B, [-1 0 1], N, N); t1(r) = toc;
tic; A2 = diag(m) + diag(s,-1) + diag(u,1); t2(r) = toc;
end
对比时间的结果:
--- 一、不同规模 N 下的单次组装耗时 ---
N spdiags(ms) diag(ms)
100 454.148 0.652
300 1311.650 0.868
1000 4248.859 8.807
2000 8216.142 25.996
