Приближени методи за решаване на СЛАУ (системи линейни алгебрични уравнения)

Пример за случая А е близка до единичната матрица:

B = (({{-0.2, 0.1, -0.2}, {-0.1, 0.1, -0.1}, {-0.1, -0.2, -0.1}})); b = {1,0,-1};
x = {0,0,0};
For[k = 0, k ≤ 11, k++,
Print["k = ",k," x = ",x];
x = B.x+b]

В горния код, при този избор на начално приближение, попадаме още на първата стъпка на точното решение.

B = (({{-0.2, 0.1, -0.2}, {-0.1, 0.1, -0.1}, {-0.1, -0.2, -0.1}})); b = {1,0,-1};
x = {0.1,0,0};
For[k = 0, k ≤ 11, k++,
Print["k = ",k," x = ",x];
x = B.x+b]

В примера за оценка на грешката гледаме колко са верните знака в решението. В случая, това можем да го направим, защото знаем точното решение.

Пример за случая А е с ДГД (доминиращ главен диагонал). Метод на простата итерация (Якоби):

B =(({{1.2, -.1, .2}, {.1, .9, .1}, {.1, .2, 1.1}})); b = {1,0,-1};
n = Length[b];
For[i = 1,i≤n,i++, 
b[[i]]=b[[i]]/B[[i,i]];
B[[i]] = -B[[i]]/B[[i,i]];
B[[i,i]]=0];
Print["ИП: (x^((k + 1))) = ", MatrixForm[B], ".(x^((k)))+",MatrixForm[b]]
x = {0.1,0,0};
For[k = 0, k ≤ 11, k++,
Print["k = ",k," x = ",x];
x = B.x+b]

B =(({{1.2, -.1, .2}, {.1, .9, .1}, {.1, .2, 1.1}})); b = {1,0,-1};
n = Length[b];
For[i = 1,i≤n,i++, 
b[[i]]=b[[i]]/B[[i,i]];
B[[i]] = -B[[i]]/B[[i,i]];
B[[i,i]]=0];
Print["ИП: (x^((k + 1))) = ", MatrixForm[B], ".(x^((k)))+",MatrixForm[b]]
x = {0.1,-1,2};
For[k = 0, k ≤ 11, k++,
Print["k = ",k," x = ",x];
x = B.x+b]

Пускаме програмата с друго начално прибижение:

B =(({{1.2, -.1, .2}, {.1, .9, .1}, {.1, .2, 1.1}})); b = {1,0,-1};
n = Length[b];
For[i = 1,i≤n,i++, 
b[[i]]=b[[i]]/B[[i,i]];
B[[i]] = -B[[i]]/B[[i,i]];
B[[i,i]]=0];
Print["ИП: (x^((k + 1))) = ", MatrixForm[B], ".(x^((k)))+",MatrixForm[b]]
x = {0.1,-10,2};
For[k = 0, k ≤ 20, k++,
Print["k = ",k," x = ",x];
x = B.x+b]