Я использую метод наискорейшего спуска, чтобы найти решение линейной системы с матрицей Гильберта 5x5. Я считаю, что код хорош в том смысле, что он дает мне правильный ответ.Самый крутой спуск, чтобы найти решение линейной системы с гильбертовой матрицей
Моя проблема заключается в том, что:
Я думаю, что это занимает слишком много итераций, чтобы получить к правильному ответу. Я считаю, что, возможно, что-то пропустил в алгоритме, но я не уверен, что на данный момент.
Я не уверен, что это самый эффективный способ реализации алгоритма, и, кроме того, он немного запутан, на что «tol» выбрать.
Любое понимание этих вопросов будет оценено (особенно 1.). Благодаря!
% Method of Steepest Descent with tol 10^-6
h = hilb(5); %Hilbert 5x5 matrix
b = [1;1;1;1;1]; %solution matrix
solution = zeros(d,1); %Initialization
residual = h*solution - b;
tol = 10^(-6)
count = 0;
while residual'*residual > tol;
roe = (residual'*residual)/(residual'*h*residual);
solution = solution - roe*residual;
residual = h*solution - b;
count = count + 1;
end
count
solution
%Method of Steepest Descent with tol 10^-12
solution = zeros(d,1);
residual = h*solution - b;
tol = 10^(-12)
count = 0;
while residual'*residual > tol;
roe = (residual'*residual)/(residual'*h*residual);
solution = solution - roe*residual;
residual = residual - roe*h*residual;
count = count + 1;
end
count
solution
%another_solution = invhilb(5)*b %Check for solution
Вы пробовали это ?: https://en.wikipedia.org/wiki/Gradient_descent#MATLAB – Aschab