Я пытаюсь использовать MATLAB для запуска итерации Ричардсона для вычисления решения линейной системы Ax=b. Я написал функцию для этого, но получил ошибку, когда попытался ее запустить. Ниже приведена моя функция, где x0
— начальная итерация, L
— максимальное количество итераций, A
— невырожденная матрица nxn, b
— вектор длины n
, a
— вместо альфа-параметра, необходимого для алгоритма, tol
— желаемый уровень точности, x
— вектор длины n
, а k
— фактическое количество итераций:
function [x,k]=Richardson(x0,L,A,b,a,tol)
n = size(b);
x1 = x0 + a*(b-A*x0);
Norm = norm(x1-x0)/sqrt(n);
k = 1;
x0 = x1;
while (Norm > tol) && (k < L)
x1 = x0 + a*(b-A*x0);
Norm = norm(x1-x0)/sqrt(n);
k = k + 1;
x0 = x1;
end
x = x1;
Я попытался запустить эту функцию, используя следующее:
x0=[0;0;0];
L = 10;
A=[1,0,0;0,2,0;0,0,4];
b=[1;1;1];
a=-1;
tol=10.^(-5);
a1=Richardson(x0,L,A,b,a,tol)
Это была ошибка, которую я получил:
Error using /
Matrix dimensions must agree.
Error in Richardson (line 4)
Norm = norm(x1-x0)/sqrt(n);
Error in HW8 (line 11)
a1=Richardson(x0,L,A,b,a,tol)
Я не понимаю, как это происходит, потому что x0
и x1
оба являются векторами длины n
. Я реализую это неправильно?