我最近对 linsolve 直接求解器进行了计时,看到求解器似乎可以二次缩放甚至高达 1000 维,我感到有点震惊。具体来说,我运行了以下代码,它表明所用时间的三次系数. 根据我的回忆,三次系数不应该那么小,而是更像. 为什么例行程序这么快?我在一个 5 岁的 macbook pro 上,只有 2 个核心。
clear; close all; clc
pv = [ 10 20 30 40 50 60 70 80 90 100 200 300 400 500 600 700 800 900 1000];
tv = nan(length(pv), 1);
runs=3;
tv2 = nan(length(pv), 1);
for pi = 1:length(pv)
p = pv(pi);
v = randn(p, 1);
m = randn(p, p);
% Calculate time for mldivide.
tic; for i = 1:runs mldivide(m, v); end; tv(pi) = toc/runs * 1e9;
% Calculate time for linsolve.
tic; for i = 1:runs linsolve(m, v); end; tv2(pi) = toc/runs * 1e9;
end
plot(pv, tv, 'b');
hold on;
plot(pv, tv2, 'r');
ylabel('nano-seconds');
xlabel('dimension');
