Алгоритмы для вычисления корней системы на языке Паскаль

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование

?ы следующий:

 

Х1=?1+?Х1;

Х2=?2+?Х2;

Х3=?3+?Х3.

 

Вычисления заканчиваются тогда, когда разность между двумя ближайшими итерациями значения корня будет меньше ? т.е.

 

¦Х1?-Х1??¦<=?;

¦Х2?-Х2??¦<=?;

¦Х3?-Х3??¦<=?.

 

Метод Зейделя

Этот метод представляет собой некоторую модификацию метода итерации. Основная идея заключается в том, что при вычислении n-ого приближения неизвестной Хi учитываются уже вычисленные (n-1)-ые значения переменных Х1, Х2, Х3.

Пусть дана СЛАУ

 

А11Х1+А12Х2+А13Х3=В1(1)

А21Х1+А22Х2+А23Х3=В2(2)

А31Х1+А32Х2+А33Х3=В3(3)

 

Разрешим каждое из уравнений относительно Х1, Х2, Х3.

Приведенная система имеет вид: Хi = ?i +? ?ij Хi;

Выберем произвольное начальное приближение Х1, Х2, Х3.

Далее предполагая, что (n-1)-ое приближение корней Хi?? корней известно, будем строить n-ое приближение корней по методу Зейделя по следующим формулам:

 

Х1?=?1+??1jХj??;

Х2?=?2+??2jХj??+?2jX1?;

Х3?=?3+??3jХj??+?3jX1?.

 

Обычно метод Зейделя дает лучшую сходимость, чем метод итерации, но приводит к более громоздким вычислениям. Процесс вычисления заканчивается тогда, когда выполняется условие ¦Хi?-Хi??¦<=?, т.е. разность приближений корня в соседних итерациях меньше или равна заданной точности

 

4. Блок-схемы

 

Основная программа

 

Метод Гауса

 

Метод итераций

 

Метод Зейделя

 

6.Текст программы

 

PROGRAM kyrsach;crt;, fi, x: array [1..3] of real;: array [1..3,1..4] of real;, j: integer;, K2, K3, A1, A2, A3: real;: byte;: char;dlina = string [22];

********формирование рамки********frame (x1, y1, x2, y2: byte);= #186; b = #187; c = #188;= #200; e = #201; f = #205;(x1, y1);(e);i:= (x1+1) to (x2-1) do write (f);(b);i:= (y1+1) to (y2-1) do begin(x1, i);(a);(x2, i);(a);;(x1, y2);(d);i:= (x1+1) to (x2-1) do write (f);(c);;

********выбор цвета********cf (c, f: byte);(c);(f);;

********процедура задержки********payza (n: byte);i:= 1 to n do (10000);

end;

********формирование титульного листа********

Procedure zastavka;ch: char;;(1, 1, 80, 25);(14, 0);;(3, 3, 78, 24);(5);(36, 4); write ('БНТУ');(5);(35, 6); write ('МНО РБ'); (5);

gotoxy (25, 9); write (Курсовой проект по информатике');

payza (5);

gotoxy (45, 14); write ('Исполнила: Стражникова Е. В.');

gotoxy (45, 15); write ('Проверил: Тарасевич Л. А.');

payza (5);(35, 22); write ('Минск 2003');;;;

********звуковай сигнал********beep;(800);(1);;;

********формирование меню********menu(q1, q2, q3: byte; , ss2, ss3, ss4, ss5, ss6, ss7, ss8: dlina;result: byte);met, men;kr = 8;m: array [1..kr] of string [48];, t: byte;: array [1..kr] of byte;: boolean;:= true;[1]:= ss1; m[2]:= ss2; m[3]:= ss3; m[4]:= ss4;[5]:= ss5; m[6]:= ss6; m[7]:= ss7; m[8]:= ss8;:= length (m[1]);i:= 2 to q3 dolength (m[i])>t then t:= length (m[i]);(q1-1, q2, q1+t+5, q2+q3+1);i:= 1 to q3 do begini = 1 then cf (0,10)cf (10,0);(q1, q2+1);(m[i]);;(14, 3);(15+128, 1);('С помощью ',chr(25), ' или ',chr(24),

укажите режим и нажмите', "Enter"');

cf (7, 0);: i:= 1;f1 = true do begin:= readkey;ch = #13 then f1:= false;(ch = #0) and keypressed then begin:= readkey;ch of

#80: begin;(q1, q2+i);(10, 0);(m[i]);:= i+1;I = (q3+1) then begin:= 1;(10, 0);(q1, q2+1);(0, 10);(m[i]);(10, 0);met;;(q1, q2+i);(0, 10);(m[i]);(10, 0);;

#72: begini = 1 then goto met;(q1, q2+i);;(10, 0);(m[i]);:= i-1;(q1, q2+i);(0, 10);(m[i]);;;:;;:= i;(10, 0);

End;

********формирование надписей********

Procedure menu1;

Begin:= readkey;ch = #13 then begin;

menu (27, 9, 8, ' М е н ю . ',

' ',

' Метод Гаусса. ',

' Метод итераций. ',

' Метод Зейделя. ',

' ',

' Выход ',

' ', regime);;;

********ввод исходных данных********text;;

writeln ('Введите исходные данные');

for i:= 1 to 3 do begin('S',i,'='); readln (S[i]);('FI',i,'='); readln (FI[i]); end;;

cf (9, 0);

writeln (' И С Х О Д Н Ы Е Д А Н Н Ы Е );

cf (10, 0);;('------------------');(' i | Si | FIi ');('------------------');i:= 1 to 3 do('| ',i,' | ',s[i]:0:1,' | ',fi[i]:0:1,' |');('------------------');;(10);('K1*Si*cos(FIi)+K2*sin(FIi)-K3=Si^2');;(9, 0);('Система уравнений');;(10, 0);i:= 1 to 3 do('K1*',S[i]:0:1,'*cos(',FI[i]:0:1,')*K2*sin(',FI[i]:0:1,')-K3=',S[i]:0:1,'^2');;(10);i:= 1 to 3 do[i]:= pi/180*FI[i];i:= 1 to 3 do begin[i,1]:= S[i]*cos(FI[i]);[i,2]:= sin(FI[i]);[i,3]:= -1; a[i,4]:= sqr(S[i]); ;;

********метод Гауса********gays;n, k, m: real;:= a[1, 1]; k:= a[2, 1]; m:= a[3, 1]; a[1, 1] = 0 then writeln ('Система является вырожденной');

for j:= 1 to 4 do begin[1, j]:= a[1, j]/n;[2, j]:= a[1, j]*k - a[2, j];[3, j]:= a[1, j]*m - a[3, j]; end;:= a[2, 2]; k:= a[3, 2];j:= 1 to 4 do begin[2, j]:= a[2, j]/n;[3, j]:= a[2, j]*k - a[3, j];;:= a[3, 4]/a[3, 3];:= a[2, 4]-a[2, 3]*K3;:= a[1, 4]-a[1, 3]*K3 - a[1, 2]*K2;; (9, 0);

writeln (Решение системы');

writeln;

cf (13, 0);('K1=',K1:0:5);('K2=',K2:0:5);('K3=',K3:0:5);(10);;;

********метод Зейделя********zeydel;z;e, k11, k22, k33: real;

writeln ('Введите требуемую точность вычислений');

write ('e=');(e);:= a[1, 4]/a[1, 1]; K22:= 0; K33:= 0;:= 0; K2:= 0; K3:= 0;: K1:= (a[1, 4]-a[1, 2]*K22 - a[1, 3]*K33)/a[1, 1];:= (a[2, 4]-a[2, 1]*K1 - a[2, 3]*K33)/a[2, 2];:= (a[3, 4]-a[3, 1]*K1 - a[3, 2]*K2)/a[3, 3];(abs(K1 - K11) >= e) and (abs(K2 - K22) >= e) and (abs(K3 - K33) >= e)begin:= K1; K22:= K2; K33:= K3;z;begin(9, 0); ('Решение системы.');

writeln;

cf (13, 0);('K1=',k1:0:5);('K2=',k2:0:5);('K3=',k3:0:5);;;

********метод итераций********iter;z;e, k11, k22, k33: real;

writeln ('Введите требуемую точность вычислений');

write ('e=');(e);:= a[1, 4]/a[1, 1]; K22:= a[2,4]/a[2, 2]; K33:= a[3,4]/a[3, 3];:= 0; K2:= 0; K3:= 0;: K1:= (a[1, 4]-a[1, 2]*K22 - a[1, 3]*K33)/a[1, 1];:= (a[2, 4] - a[2, 1]*K11 - a[2, 3]*K33)/a[2 ,2];:= (a[3, 4] - a[3, 1]*K11 - a[3, 2]*K22)/a[3, 3];(abs(K1 - K11) >= e) and (abs(K2 - K22) >= e) and (abs(K3 - K33) >= e)begin:= K1; K22:= K2; K33:= K3;z;begin(9, 0); (Решение системы');

writeln;

cf (13, 0);

writeln ('K1=',k1:0:5);('K2=',k2:0:5);('K3=',k3:0:5);;;

********проверка решения системы********

Procedure prov;

Begin(9, 0);('Проверка. ');;(10, 0);i:= 1 to 3 do begin[i, 1]:= S[i]*cos(FI[i]);[i, 2]:= sin(FI[i]);[i, 3]:= -1; a[i, 4]:= sqr(S[i]);;('K1*Si*cos(FIi)+K2*sin(FIi)-K3=Si^2');;i:= 1 to 3 do begin(K1:0:1,'*',S[i]:0:1,'*cos(',FI[i]:0:1,')+',K2:0:1,'*sin(',FI[i]:0:1,')',-K3:0:1,'=');[i]:= a[i,1]*K1+a[i,2]*K2-K3;(x[i]:0:2,'=(S',i,')^2');end;(x[1] = 1.00) and (x[2] = 1.44) and (x[3] = 4.00) writeln ('Система решена верно.');

writeln;;

********нахождение значений********yrav;:= K1/2; A3:= K2/(2*A1);:= sqrt(sqr(A1) + sqr(A3)-K3);(10);(9, 0);('Коффициенты');(13, 0);;('A1=',A1:0:5);('A2=',A2:0:5);('A3=',A3:0:5); (10, 0);

menu1;

readkey;

End;

********формирование пустого окна********

Procedure pusto;

Begin

gotoxy (10, 14);

write ('О Ш И Б К А П Р И В Ы Б О Р Е О П Е Р А Т О Р А');

sound (330); delay (32000); nosound;(330); delay (32000); nosound;(330); delay (32000); nosound;(262); delay (55000);(294); delay (32000); nosound;(294); delay (32000); nosound;(294); delay (32000); nosound;(247); delay (55000); nosound;1;

End;

********тело основной программы********

BEGIN;;;;;regime of

, 2, 6, 8: pusto;

: begin;;;;;

: begin;;;;;

: begin;;;;;

: begin clrscr; halt; end;;;

END.

 

7.Результаты счета

 

 

Где

iS