Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Вычислит.мат_лаб.р

..pdf
Скачиваний:
23
Добавлен:
17.05.2015
Размер:
1.32 Mб
Скачать

Лабораторная работа № 4 Решение нелинейных уравнений и систем нелинейных уравнений

Метод простых итераций Порядок выполнения лабораторной работы:

1.Найти нулевое приближение решения;

2.Преобразовать систему f(x) = 0 к виду х = Ф(х);

3.Проверить условие сходимости метода. Схема алгоритма приведена на рисунке 20.

Пример. Решить методом простых итераций систему

ln( y / z)

1 x

0

10z 2 10y

20x 2

4 0

xy 20z 40 0

В качестве нулевого приближения выберем точку х=1, у = 2.2, z = 2. Преобразуем систему к виду

x

ln( y / z)

1

y

0,4

z 2

2x 2

z

2

0,05xy

Текст программы: PROCEDURE Iteraz; Var I,J,K,J1 : Integer;

S,U,U1 : Real; X2,X3,Eps : Real;

R

: tvector;

Begin

 

Eps:=0.01; X2:=0.0; K:=1;

Repeat

 

For J:=1 To Nn Do Begin

S:=0.0;

 

For I:=1 To Nn Do Begin S:=S+Aa[i,j]*Xx[i]; End;

R[j]:=S;

End;

For J1:=1 To Nn Do Begin Xx[j1]:=R[j1]; End; X3:=Xx[1]; For I:=1 To Nn Do Begin If (Xx[i]>=X3) Then X3:=Xx[i]; Еnd; For I:=1 To Nn Do Begin Xx[i]:=Xx[i]/X3; End;

X1:=X3; U:=Abs(X2-X1); U1:=U/Abs(X1); If (U1>=Eps) Then X2:=X1;

K:=K+1;

Until ((K>=50)or(U1<=1e-4)) End;

Вычисления по программе привели к следующим результатам:

X(1)= 1.1132 Х(2)= 2.3718 Х(3)= 2.1365

31

Количество итераций:5

procedure Iteraz

eps=0.01

x2=0.0

k=1

K

J

I>Nn

S=0.0

I

I>Nn

S=S+aa[i,j]*Xx[i]

I=I+1

I

R[j]=s

J=J+1

J

J1

I>Nn

Xx[j1]=R[j1]

J1=J1+1

J1

x3=Xx[1]

I

I>Nn

Xx[i]>x3

I=I+1

I

A

I

I>Nn

Xx[i]=XX[i]/3

I=I+1

I

X1=X3

U=Abs(x2-X1)

U1=U/abs(X1)

U1>=eps

X2=X1

K=K+1

K>=50 orU1<=1e-4

K

Возврат

X3=Xx[i]

A

Рисунок 20 - Схема алгоритма метода простых итераций

32

Метод Ньютона

Программу можно использовать для решения систем не выше десятого порядка.

Входные параметры: n — число уравнений системы (совпадает с числом неизвестных), n 10; х—массив из n действительных чисел, содержащий начальное приближение решения; f— имя внешней процедуры f(n, х, у), вычисляющей по заданным значениям х, расположенным в элементах массива х, текущие значения функции f и размещающей их в элементах массива у; g — имя внешней процедуры g(n, x, d), вычисляющей

по заданным значениям х из массива х элементы матрицы

f

,которая

x

 

 

размещается в массиве d размерности n x n; eps — значение условия окончания итерационного процесса.

Выходные параметры: х — массив из n действительных чисел (он же входной) содержит при выходе из подпрограммы приближенное значение решения; k—количество итераций.

Порядок выполнения лабораторной работы:

 

 

1.

Определить из геометрических соображений начальное при-

ближение решения.

 

 

2.

Составить подпрограммы f и g для вычисления значений f и

f

.

 

 

 

x

3.Составить головную программу, содержащую описание массива х, имен f и g, присвоение фактических значений параметрам n, х, eps, обращение к ТNUTON и печать результатов.

4.Провести вычисления на ЭВМ.

Схема алгоритма приведена на рисунке 21. Пример. Решить систему уравнений

ln( y / z)

1

x

0

10z 2 10y

20x 2

4 0

xy 20z 40 0

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

procedure TNuton;

 

 

var a: T2DArray;

i, j: byte; finish: boolean;

begin

 

 

 

IterCount:= 0;

 

 

 

SetLength(a, UrCount);

for i:= 0 to High(a) do SetLength(a[i], UrCount + 1); repeat { Заполнение матрицы частных производных }

33

for i:= 0 to High(a) do begin

for j:= 0 to High(a[i])-1 do a[i, j]:= DerivativeFn(i, j, Results); a[i, High(a[i])]:= -Poliz.ExternFn(i, Results);

end; { Решение полученной СЛАУ методом Гаусса }

SetLength(Gauss.Base, Length(a)); for i:= 0 to High(a) do begin

SetLength(Gauss.Base[i], Length(a[i])); for j:= 0 to High(a[i]) do

Gauss.Base[i, j]:= a[i, j]; end; try Gauss.Solve;

except

raise Exception.Create('Данную систему этим методом решить невозможно!'); end; { Получение очередного приближения решения СНАУ }

finish:= false;

for i:= 0 to High(Results) do begin Results[i]:= Results[i] + Gauss.Results[i];

if not finish then finish:= (Abs(Gauss.Results[i]/Results[i]) > Eps); end; inc(IterCount);

until not finish; end;

В результате вычисления по программе получены следующие результаты:

X(1)= 1.1132 Х(2)= 2.3718 Х(3)= 2.1365

Количество итераций:4

34

TNuton.Solve

Itercount=0

SetLength(a,Urcou

nt)

I

I>high(a)

SetLength(a,Urcou

nt+1)

I=I+1

I

Z

I

I>high(a)

J

I>high(a[i])-1

a[i,j]=derivativeFn(i,jres

ults)

J=J+1

J

a[i,high(a[i])]=-poliz.exte rnfn(i,results)

I=I+1

I

SetLength(Gausse

.Base[i],Length

(a[i]))

I

I>high(a)

h=h/k

SetLength(Gausse

.Base[i],Length

(a[i]))

J

I>high(a[i])

Gauss.Base[i,j]=a[i,j]

J=J+1

J

I=I+1

I

try gauss.Solve

finish=false

I

I>high(Results)

Results[i]=results[i]+ga

uss.Results[i]

not finish

finish=(Abs(Gauss.resul

ts[i]/results[i])>Extract

I=I+1

I

inc(itercount)

not finish Z

Возврат

Рисунок 21 - Схема алгоритма метода Ньютона

35

Варианты заданий

Таблица 4

 

sin(x l) - y 1,2

 

sin(x 0,5) - y l

1

2x

cosy

2.

16

cos(y- 2) x 0

 

 

 

 

 

 

 

sin x

2y

2

 

sin x (x1) 1,3- y

2

cos(y- l) x 0,7

17

x sin

y

 

 

 

 

 

3

cos(x 0,5) - y

2

18

sin(y+l)-x=l,2

Sin y2x

1

 

2y+cos x = 2.

 

 

 

 

 

 

 

 

 

sin у+2х=2

 

 

sin(y+0,5)-x=l

4

cos(x-1)+y = 0,7

19

cos(x-2)+y =0

 

 

 

 

5

sin(y-l)+x=l,3

20

cos(y+0,5)-x = 2

y-sin(x+l)=0,8

sin x —2y= 1

 

 

 

 

 

 

 

6

sin(x+l)-y=l

 

21

Sin x+2y= 1,6

2x+cos y = 2

cos(y-1)+x=l

 

 

 

 

 

 

7

sin(x+0,5)-y=1,2

22

Cos(x-l)+y = 0,5

cos(y-2)+x = 0

x –cos y = 3

 

 

 

 

 

 

 

8

cos x+y= 1,5

 

23

Cos (x+0,5)+у = 0,8

2x-sin(y-0,5)=l

sin y — 2x=l,6

 

 

 

 

 

 

 

9

2y-cos(x+l)=0

24

Sin(x

2) - y l,5

x+sin y= -0,4

 

x cos(y- 2) 0,5

 

 

 

 

 

 

 

 

cos(y-l)+x=0,5

 

cos y+x=l,5

10

y-cos x = 3

 

25

2y-sin(x-0,5)=l

 

 

 

 

 

cos(y+0,5) + x=0,8

 

2x-cos(y+l) = 0

11

sin x-2y=l,6

 

26

y+sin x= -0,4

 

 

 

 

 

sin(y + 2)-x=l,5

 

cos(x-l)+y=0,8

12

y+cos(x-2)=0,5.

27

x—cos y=2

 

 

 

 

 

Cos x+y= 1,2

 

cos(x+0,5)+y=l

13

2x-sin(y-0,5) = 2.

28

siny—2x=2

 

 

 

 

 

Sin(x-1)+y= 1,5

 

sin(у+1)-х=1

14

х - sin(y+ 1)= 1

29

2y+cos x = 2

 

 

 

 

 

Cos(y-l)+x=0,8

 

cos(x-l)+y=l

15

y-cos x=2.

 

30

sin y+2x= 1,6

 

 

 

 

 

 

 

36

Лабораторная работа № 5 Решение проблемы собственных значений и собственных векторов Точные методы

Метод Леверрье

Входные параметры: n—целое положительное число, равное порядку n системы;

Выходные параметры: b—массив из n действительных чисел, при выходе из программы содержит решение системы.

Пример. Вычислить собственные значения и собственные вектора матрицы

|2

2

–2|

|2

5

–4|

|-2 –4

5|

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

PROCEDURE Liver (Var VeS:Tvector;Nn:Integer);; Label 35,270,220,100,80,190,500,250,350,120,10; Var

I,J,K,T:Integer; Y,Yy:tvector; {A,Aa:Mas;} S,C,Q,P,H,D,U,M,V,F,W,Yyy,Z,L,R,X,Aaa,B:Real;

Sq,Sq1: Real; F1: TEXT; Begin Assign(F1,'last.out'); Rewrite(F1);

For I:=Nn Downto 1 Do Y[i+1]:=VeS[i]; Y[1]:=1;

K:=1;

35: T:=1; C:=Y[2]/Y[1];

If (Nn=1) Then Begin P:=-C; Q:=0; Goto 270; End;

If (Nn=2) Then Begin

H:=C*C/4-Y[3]/Y[1]; Goto 220;

End;

M:=10;C:=4;D:=8;U:=4;

V:=8;F:=1;W:=2;T:=0;

80: If(M<>10) Then Goto 100; P:=C;M:=0;Q:=D;C:=U;D:=V; U:=P;V:=Q;Yyy:=C;Z:=D;F:=-F;

37

100:M:=M+1;H:=0;Q:=Y[1];P:=Y[2]-C*Q;L:=Q; 120:For J:=3 To Nn Do Begin

R:=P;P:=Y[j]-C*R-D*Q;Q:=R; R:=L;L:=Q-C*R-H*D;H:=R; End;

Q:=Y[Nn+1]-D*Q; S:=L+C*R;

If (T=0) Then Begin X:=D*R;H:=R*X+S*L; If H=0 Then Goto 80; End; C:=C+(P*S-Q*R)/H; D:=D+(P*X+Q*L)/H;

If ((C-Yyy+D-Z)<>0) Then Goto 190;

If (F=-W) Then Begin writeln('Љ®аҐм Ґ ©¤Ґ'); Goto 500;

End;

W:=-F; 190:H:=C*C/4-D;

Sq:=Sqrt((Q-P*C/2)*(Q-P*C/2)+P*P*Abs(H)); If (Sq>0.0000001) Then Goto 80;

T:=0; Y[2]:=Y[2]-C*Y[1];

For J:=3 To Nn-1 Do Begin Y[j]:=Y[j]-C*Y[j-1]-D*Y[j-2];End;

220:P:=-C/2; Q:=Sqrt(Abs(H)); If(h>=0) Then Begin M:=P+Q;P:=P-Q;Q:=0; Goto 250; End; M:=P;

250:write(F1,'p',k,'=',m:9:4,' + i',q:7:4);K:=K+1;{Ves[k-1]:=M;}WriteLn(F1,''); 270:write(F1,'p',k,'=',p:9:4,' + i',-q:7:4);K:=K+1;{Ves[k-1]:=P;}WriteLn(F1,'');

If(t<>0) Then Goto 350; Nn:=Nn-2;

Aaa:=0; Sq1:=Sqrt((S-R*C/2)*(S-R*C/2)+R*R*Abs(H)); If (Sq1<=0.0000001) Then Aaa:=1;

B:=0;

If (Nn>=2) Then B:=1; If((Aaa+B)=2) Then Begin T:=1;

Goto 120; End; Goto 35;350:500: Close(F1);

End;

38

Вычисления по программе привели к следующим результатам:

Собственные числа

Собственные вектора

 

.10000Е+01

-.94281Е+00

.23570Е+00

-.23570Е+00

.10000Е+02

-.33333Е+00

-.66667Е+00

.66667Е+00

.10000Е+01

.00000Е+00

-.70711Е+00

-.70711Е+00

Варианты заданий для нахождения собственных значений и собственных векторов матрицы приведены в таблице 5.

Метод Фадеева

Входные параметры: n—целое положительное число, равное порядку n системы; а — массив из n х n действительных чисел, содержащий входную матрицу.

Выходные параметры: q—массив из n действительных чисел при выходе из программы содержит решение системы.

Схема алгоритма приведена на рисунке 23.

Пример. Вычислить собственные значения и собственные вектора

матрицы

 

 

|2

2

–2|

|2

5

–4|

|-2 –4

5|

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

procedure Fadeev(n:integer;a:tmatr;var q:tvector); var Aa,E,B:tmatr;

i,j:integer; begin

for i:=1 to n do

for j:=1 to n do if i<>j then e[i,j]:=0 else e[i,j]:=1; Aa:=a;

q[1]:=spA(n,Aa);

MulChislo(n,q[1],e,b);

MatrVich(n,Aa,b,b); for i:=2 to n do begin

MulMatr(n,a,b,Aa); q[i]:=-spA(n,Aa)/i; MulChislo(n,q[i],e,b); MatrVich(n,Aa,b,b); end;

end;

39

Вычисления по программе привели к следующим результатам:

Собственные числа

Собственные вектора

.10000Е+01

-.94281Е+00

.23570Е+00

-.23570Е+00

.10000Е+02

-.33333Е+00

-.66667Е+00

.66667Е+00

.10000Е+01

.00000Е+00

-.70711Е+00

-.70711Е+00

40