Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Лабораторная работа №2
Метод простых итераций
Задание: Решить систему линейных алгебраических уравнений с точностью Е=0,0001.
-290.74*x1-35.37*x2-205.37*x3=4.63;
-145.37*x1-270.74*x2+49.99*x3=319.99;
299.99*x1+39.99*x2+419.89*x3=254.63;
Расчетные формулы:
Алгоритм выполнения программы:
Для применения этого метода необходимо предварительно преобразовать систему (2.1) к так называемому приведённому виду
, (2.7)
где матрица такова, что выполнены достаточные условия сходимости итерационного процесса (любое из них):
Зададим произвольно начальный вектор приближения и подставим его в правую часть преобразованной системы уравнений (2.7). Получим:
− первое приближение.
Аналогично получим
− второе приближение,
− третье приближение,
……………………………………………..
− -е приближение.
Таким образом, получена итерационная формула
(2.8)
которая в координатной форме имеет вид:
(2.9)
Последовательность векторов , полученных по этой формуле, сходится к решению, если выполнены вышеприведённые достаточные условия сходимости.
Пусть , тогда, переходя к пределу в равенстве (2.8), имеем
или имеет место формула (2.7). Следовательно, вектор − решение системы.
Если в исходной системе (2.1) преобладание диагональных элементов над остальными коэффициентами значительное, то сходимость итерационного процесса обеспечена. В этом случае переход от исходной системы (2.1) к виду (2.7) можно осуществить путём деления каждого уравнения системы (2.1) на коэффициент , формирования столбца неизвестных в левой части и переноса остальных членов в правую часть. Введём обозначения
Тогда
Формула итерационного процесса имеет в этом случае следующий вид:
.
Далее последовательно получаются приближения . Если для преобразованной системы (2.7) выполнено по меньшей мере одно из достаточных условий сходимости, то процесс итераций (2.8) сводится к единственному решению этой системы, независимо от выбора начального приближения.
Для системы (2.1) метод итераций сходится, если выполнены неравенства
т.е. модули диагональных коэффициентов в каждом уравнении больше суммы модулей всех остальных коэффициентов.
Итерационный процесс следует закончить по следующей формуле:
1ую Норму матрицы вычислить по формуле:
Код программы:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
type mas=array[1..3,1..4] of real;
const
z:mas=((-290.74,-35.37,-205.37,4.63),(-145.37,-270.74,49.99,319.99),(299.99,39.99,419.98,254.63));
n=3;
var
i,j,l:integer;
s,max,eps,k,nmaX:real;
a:mas;
x,b,xn:array[1..4] of real;
begin
Writeln(' n = 3'); Writeln;
writeln(' SLAU : '); writeln;
Writeln(' a[1,1]:=-290.74; a[1,2]:=-35.37; a[1,3]:=-205.37; b[1]:=4.63');
Writeln(' a[2,1]:=-145.37; a[2,2]:=-270.74; a[2,3]:=49.99; b[2]:=319.99');
Writeln(' a[3,1]:=299.99; a[3,2]:=39.99; a[3,3]:=419.89; b[3]:=254.63'); Writeln;
max:=0;
for i:=1 to n do
begin
for j:=1 to n do
if i<>j then
a[i,j]:=z[i,j]/z[i,i];
end;
for i:=1 to n do
b[i]:=z[i,4]/z[i,i]; //vich znach vektora b del-go na z[i,i]
writeln(' Poluchivshayasya SLAU : '); writeln;
for i:=1 to n do
begin
for j:=1 to n do
write(a[i,j]:10:4);
writeln;
end;
writeln;
for i:=1 to n do
begin
s:=0;
for j:=1 to n do
s:=s+abs(a[i,j]);
if s>max then
max:=s; //vich perv normy - max - perem(norma) dlya A
end;
eps:=(1-max)/max*0.000001;
for i:=1 to n do
xn[i]:=1;
l:=0;
repeat
nmaX:=0; // nmaX-peremennaya(norma) dlya vektora Xn - X
for i:=1 to n do
begin s:=0;
for j:=1 to n do
s:=s+a[i,j]*xn[j];
x[i]:= -s+b[i];
k:=abs(x[i]-xn[i]);
if nmaX<k then
nmaX:=k;
end;
l:=l+1;
for i:=1 to n do
xn[i]:=x[i];
until nmaX<eps;
writeln(' tochnost = 0.0001') ; writeln;
writeln(' kol-vo iteraciy : ',l);writeln;
writeln(' Resheniya SLAU : '); writeln;
for i:=1 to n do
writeln(' X[',i,']=',Xn[i]:8:4); writeln;
writeln(' proverka'); writeln;
for i:=1 to n do
begin
s:=0;
for j:=1 to n do
s:=s+z[i,j]*x[j];
writeln(' b[',i,']=',s:10:4);
end; readln; { TODO -oUser -cConsole Main : Insert code here }
end.
Результат: