В качестве эксперимента я просто хотел увидеть время вычислений между теорией Кэли-Гамильтона и функцией MATLAB inv()
. Я знал, что C-H будет медленнее на процессоре из-за количества матричных произведений, однако я не ожидал, что они будут давать мне разные ответы по мере увеличения N.
Для квадратных матриц размером менее 30 * 30 обратные значения примерно такие же. Но после этого момента они начинают довольно резко отличаться друг от друга. К тому времени, когда N = 100, они вообще не имеют ничего общего.
Это проблема числовых вычислений, или здесь происходит что-то еще? И чему я могу доверять? Я предполагаю, что inv()
очень оптимизирован и заслуживает доверия, но было бы неплохо получить некоторый вклад от других.
Вот код:
n = 100;
A = randn(n);
% MATLAB inv()
tic;
initime = cputime;
time1 = clock;
A_inv = inv(A);
fintime = cputime;
elapsed = toc;
time2 = clock;
fprintf('TIC TOC: %g\n', elapsed);
fprintf('CPUTIME: %g\n', fintime - initime);
fprintf('CLOCK: %g\n', etime(time2, time1));
% Cayley-Hamilton inversion
tic;
initime = cputime;
time1 = clock;
p_coeff = poly(A);
A_inv_2 = 0;
for ii = 1:n-1
A_inv_2 = A^(ii)*p_coeff(end-1-ii) + A_inv_2;
end
A_inv_2 = 1/-p_coeff(end) * (A_inv_2 + eye(n)*p_coeff(end-1));
fintime = cputime;
elapsed = toc;
time2 = clock;
fprintf('TIC TOC: %g\n', elapsed);
fprintf('CPUTIME: %g\n', fintime - initime);
fprintf('CLOCK: %g\n', etime(time2, time1));
Спасибо всем, кто найдет время ответить.
inv
, несомненно, имеет эти оптимизации. Насчет того, кому можно доверять:inv
, конечно. Сравнитеimagesc(A*A_inv)
иimagesc(A*A_inv_2)
в своем примере. - person Luis Mendo   schedule 18.04.2017