Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_к_ВП-1.doc
Скачиваний:
4
Добавлен:
27.09.2019
Размер:
840.7 Кб
Скачать

I, n : IntType;

X,y,x0,y0 : RealType;

F,F1,dx : ArrayType;

Yacobi : MatrixType;

Flag : BoolType;

ff : Text;

Function FunF(x,y: Real): RealType;

{Вычисление значения функции F(x,y)}

Begin

FunF:= A*x*x + B*y*y - 1;

End;

Function FunG(x,y: Real): RealType;

{Вычисление значения функции G(x,y)}

Begin

FunG:= Sin(C*x + D*y) - E*x;

End;

Function DivFx(x,y: Real): RealType;

{Вычисление значения производной функции dF(x,y)/dx}

Begin

DivFx:= 2*A*x;

End;

Function DivFy(x,y: Real): RealType;

{Вычисление значения производной функции dF(x,y)/dy}

Begin

DivFy:= 2*B*y;

End;

Function DivGx(x,y: Real): RealType;

{Вычисление значения производной функции dG(x,y)/dx}

Begin

DivGx:= C*Cos(C*x+D*y) - E;

End;

Function DivGy(x,y: Real): RealType;

{Вычисление значения производной функции dG(x,y)/dy}

Begin

DivGy:= D*Cos(C*x+D*y);

End;

{ГОЛОВНАЯ ПРОГРАММА}

BEGIN

ClrScr; {Очистка экрана}

Assign(ff, NameOut);

ReWrite(ff);

Write ('Введите начальное приближение к корню x:');

ReadLn(x0);

WriteLn(ff, 'Начальное приближение x= ',x0);

WriteLn(ff,' ');

WriteLn;

Write ('Введите начальное приближение к корню y:');

ReadLn(y0);

WriteLn(ff, 'Начальное приближение y= ',y0);

WriteLn(ff,' ');

WriteLn;

x:= x0; y:= y0;

n:=0; {Начальное число итераций}

Repeat

Flag:=true; {Флажок= Истина}

{Вычисление функции}

F[1]:= FunF(x,y);

F[2]:= FunG(x,y);

{Вычисление Якобиана}

Yacobi[1,1]:= DivFx(x,y);

Yacobi[1,2]:= DivFy(x,y);

Yacobi[2,1]:= DivGx(x,y);

Yacobi[2,2]:= DivGy(x,y);

WriteLn(ff, 'x=',x:15:7,' y=',y:15:7,

' f(x,y)=', F[1]:15:7,' g(x,y)=', F[2]:15:7);

WriteLn('x=',x:15:7,' y=',y:15:7,

' f(x,y)=', F[1]:15:7,' g(x,y)=', F[2]:15:7);

{Вычисление корней (приращений) по методу Крамера: через определитель}

dx[1]:= (-F[1]*Yacobi[2,2]+F[2]*Yacobi[1,2])

/(Yacobi[1,1]*Yacobi[2,2]-Yacobi[2,1]*Yacobi[1,2]);

dx[2]:= (-Yacobi[1,1]*F[2]+F[1]*Yacobi[2,1])

/(Yacobi[1,1]*Yacobi[2,2]-Yacobi[2,1]*Yacobi[1,2]);

x:= x+dx[1];

y:= y+dx[2];

{Новые значения функции}

F1[1]:= FunF(x,y);

F1[2]:= FunG(x,y);

{Вычисление погрешности}

For i:=1 to 2 do

if(Abs(F1[i]-F[i]) > Eps) Then Flag:= False;

{Если погрешность велика, то Флажок = Ложь}

n:=n+1; {Определение количества итераций}

Until Flag or (n > 100);

WriteLn(ff,'Расчет oкончен');

WriteLn(ff,' ');

WriteLn('Расчет oкончен');

WriteLn;

WriteLn(ff, 'Количество итераций, n=',n:10);

WriteLn('Количество итераций, n=',n:10);

Close(ff);

WriteLn (' ДЛЯ ПРОДОЛЖЕНИЯ НАЖМИТЕ ЛЮБУЮ КЛАВИШУ!!!');

Repeat Until KeyPressed; {Ожидает нажатия любой клавиши, модуль Crt}

{Используется для задержки информации на экране}

ClrScr;{Очищает экран, модуль Crt}

END.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]