Тестирование пограммы
Лабораторная работа №2 Методы решения систем линейных уравнений
Цель работы: изучение прямых и итерационных методов решения систем линейных уравнений. Метод простых итераций. Cходимость метода гарантируется, если значения диагональных элементов матрицы A превосходят остальные. Метод простых итераций заключается в том, что при заданных начальных приближениях вычисляются последовательные приближения корней по формуле простых итераций .
Вычисления производят до тех пор, пока , где (j)– номер итерации, e – заданная погрешность вычислений.
Порядок выполнения работы 1. Изучить метод решения систем линейных уравнений, соответствующий Вашему варианту. 2. Разработать программы для решения системы линейных уравнений по методу, соответствующему Вашему варианту. 3. Решить заданную систему линейных уравнений с точностью e=0,0001.
Варианты заданий
1) Метод простых итераций, k=1,
Листинг программы Program LUF; uses crt; Type Mas=array [1..3,1..3] of real; MasMer=array [1..3] of real; Var A,A1,AI: Mas; B,B1,x,x0,x1,BI: MasMer; i,j,k,sc,ind:integer; max,e,chis,xn,pr:real;
Procedure Wiwod(AW:Mas; YW:masMer); Var wi,wj: integer; Begin For wi:=1 to 3 do begin For wj:=1 to 3 do if wj<> 3 then write (aw[wi,wj]:3:2,' + ') else write (aw[wi,wj]:3:2); writeln ('=',Yw[wi]); end; End; Begin clrscr; e:=0.0001; K:=1; For i:=1 to 3 do For j:=1 to 3 do Begin a[1,1]:=1.2; a[1,2]:=-1.8; a[1,3]:=(2-0.1*k); a[2,1]:=3.9; a[2,2]:=(2+0.2*k); a[2,3]:=-5.2; a[3,1]:=(1+0.1*k); a[3,2]:=-2.2; a[3,3]:=7.3; end; For i:=1 to 3 do Begin b[1]:=7.5; b[2]:=8.1; b[3]:=8.7; end; Writeln ('___________________________'); Writeln ('Исходная система уравнений |'); Writeln ('___________________________'); Wiwod(A,b); Writeln ('__________________________________________________________________'); Writeln ('Сходимость метода гарантируется, если значения диагональных эле - |'); Writeln ('ментов массива превосходят остальные - диагональное преобладание. |'); Writeln ('Проверка диагональных элементов массива на максимальное значение. |'); Writeln ('__________________________________________________________________'); sc:=0; Writeln ('__________________________________________________________________'); Writeln (' ВЫПОЛНЕНИЕ ПРОВЕРКИ НА ДИАГОНАЛЬНОЕ ПРЕОБЛАДАНИЕ. |'); Writeln ('__________________________________________________________________'); For i:=1 to 3 do begin max:=a[i,i]; For j:=1 to 3 do if max<a[i,j] then sc:=sc+1; end; if sc<>0 then begin writeln ('Нужна перестановка'); Writeln ('__________________________________________________________________'); Writeln ('Заменяем исходные уравнения системы на равнозначные по формулам: |'); Writeln ('A"= A+B |'); Writeln ('B"= B+C-3A |'); Writeln ('C"= C |'); Writeln ('__________________________________________________________________'); For j:=1 to 3 do begin a1[1,j]:=a[1,j]+a[2,j]; b1[1]:=b[1]+b[2]; a1[2,j]:=a[2,j]+a[3,j]-3*a[1,j]; b1[2]:=b[2]+b[3]-3*b[1]; a1[3,j]:=a[3,j]; b1[3]:=b[3]; end; end; Wiwod(a1,b1); writeln ('Press ENTER'); readln; clrscr; writeln ('__________________________________________________________________'); Writeln ('Приведение функции к итерационному виду: |'); Writeln ('__________________________________________________________________'); for i:=1 to 3 do begin for j:=1 to 3 do begin ai[i,j]:=-a1[i,j]/a1[i,i]; if i=j then ai[i,j]:=0; end; bi[i]:=b1[i]/a1[i,i]; end; for i:=1 to 3 do begin write ('x',i,'=',ai[i,1]:4:3,'*x1 +',ai[i,2]:4:3,'*x2 +',ai[i,3]:4:3,'*x3 +',bi[i]:4:3); writeln; end;
for i:=1 to 3 do x0[i]:=bi[i]; sc:=0; writeln ('Press ENTER!'); readln; clrscr; repeat sc:=sc+1; writeln ('Итерация № ',sc,' приближение = ',pr:5:4); for i:=1 to 3 do begin x1[i]:=0; for j:=1 to 3 do x1[i]:= x1[i]+ai[i,j]*x0[j]; x1[i]:=x1[i]+bi[i]; writeln ('x',i,' - ',x1[i]:4:3,' '); end; if (sc mod 5) =0 then begin writeln ('Press ENTER!'); readln; clrscr; end; ind:=0; for i:=1 to 3 do begin pr:=abs(x0[i]-x1[i]); if pr>e then ind:=ind+1; end; for i:=1 to 3 do x0[i]:=x1[i]; until ind =0;
Writeln ('_________'); Writeln ('Проверка |'); Writeln ('_________'); for i:=1 to 3 do begin writeln (a[i,1]:3:2,'*',x0[1]:3:2,'+',a[i,2]:3:2,'*',x0[2]:3:2,'+',a[i,3]:3:2,'*',x0[3]:3:2,'=',a[i,1]*x0[1]+a[i,2]*x0[2]+a[i,3]*x0[3]:4:2); end; End.
|