Алгоритмы для вычисления корней системы на языке Паскаль
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
?ы следующий:
Х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