spdiags函数算得很慢

标签: 问题反馈——使用问题

匿名 2026-11-09 15:55:02

运行这段程序:

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  



回复

回复

重置 提交