Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЧМ_2012 / Лекции / Численные_методы.pdf
Скачиваний:
392
Добавлен:
09.06.2015
Размер:
1.99 Mб
Скачать

42

while i > 0 z = 0.0; j = k;

while j > i

z = z + a(i,j)*x(j); j = j-1;

end

x(i) = (a(i,m)-z)/a(i,i); i = i-1;

end

disp('Вектор искомых неизвестных:') x

Рис.3.2. Метод Гаусса

2) ФОРМУЛА КРАМЕРА

xi = DDi , где

D определительматрицысистемы, а Di определитель, получающийсяиз D заменой i тогостолбца матрицысистемы на столбецсвободных членов.

Давайте теперь на конкретном примере разберем этот метод.

Решим следующую систему уравнений:

x1 x2 = −12x1 + x2 = 7

43

D

 

=

 

1

1

 

=3 ;

 

 

 

 

 

 

 

 

 

 

 

 

 

2

1

 

 

 

 

 

 

 

 

 

D

 

=

 

 

1 1

 

= 6 ;

 

 

 

 

 

 

1

 

 

 

 

7

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

D

2

=

 

1

1

 

=9 ;

 

 

 

 

 

 

 

 

 

 

 

 

2

7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x

 

=

D1

= 2, x

=

D2

=3 ;

 

 

 

1

 

 

 

D

1

 

D

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Теперь представим решение в системе Scilab.

Листинг3.2 (Крамер)

//читаем матрицу из файла f = mopen('C:\Matrix.txt','r'); n = mfscanf(f,'%d');

m = mfscanf(f,'%d'); for i = 1:n

for j = 1:m

a(i,j) = mfscanf(f,'%g'); end

end mclose(f);

//формируем матрицу системы for i = 1:n

for j = 1:n d(i,j) = a(i,j);

end end

//формируем столбец свободных членов for j = 1:n

v(j) = a(j,m); end

temp = d;

D = det(d); // определитель системы

for i = 1:n for j = 1:n

// меняем i-ый столбец матрицы на столбец свободных членов d(j,i) = v(j);

end

vector_ans(i) = det(d)/D; d = temp;

end

disp('вектор ответов:'); vector_ans

44

Рис.3.3. Формула Крамера

3) МЕТОД ПРОСТЫХ ИТЕРАЦИЙ

Дано уравнение:

5x1 2x2 + x3 =11

(1) x1 3x2 + x3 =5

4x1 + 2x2 7x3 = −17

Чтобы данную систему можно было решить итерационным методом, требуется выполнение системы условий:

 

 

A

 

 

 

 

 

 

 

 

A

 

 

 

+

 

 

 

A

 

;

 

 

 

 

 

 

 

 

 

 

11

 

 

 

 

 

 

12

 

 

 

 

 

 

13

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A22

 

 

 

 

A21

 

 

 

+

 

A23

 

;

 

 

 

 

 

 

 

 

 

 

A

 

 

 

 

 

 

A

 

+

 

 

 

 

 

A

 

;

 

 

 

 

 

 

 

 

33

 

 

 

 

 

 

 

 

 

31

 

 

 

 

 

 

 

 

 

32

 

 

 

 

 

 

5 ≥ − 2 + 1 =3; // выполняется

3 1 + 1 =3; // выполняется

7 ≥ − 4 + 2 = 6; // выполняется

x =

11 + 2x2 x3

,

x

2

=

5 x1 x3

,

x

3

= 17 + 4x1 2x2 ; (*)

 

 

 

 

1

5

 

 

 

 

3

 

 

 

 

 

 

 

7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Зададим точность нашего решения системы уравнений e = 0.0001;

Зададим начальные значения x1 = 0,

x2

= 0,

 

x3 = 0; (начальное

приближение вектора ответов).

 

 

 

 

 

 

 

 

Тогда, из (*) имеем:

 

x =

11

,

x

 

= −

5

, x

 

=

17

; Теперь подставляем

 

 

2

 

3

 

 

 

 

 

 

1

5

 

 

 

 

 

3

 

7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

эти значения в формулы (*), получаем новые x1 , x2 , x3 ; продолжаем этот процесс до тех пор, пока при заданных x1 , x2 , x3 не выполнится система условий:

45

 

 

11 (5x1 2x2 + x3 )

 

e;

 

 

 

 

5 (x1 3x2

+ x3 )

 

e;

 

 

 

 

 

 

 

 

 

 

 

17 (4x + 2x

2

 

7x

)

 

e;

 

 

 

 

1

 

3

 

 

 

(см. таблицу3.1)

x1

x2

x3

11 (5x1 2x2 + x3 )

5 (x1 3x2 + x3 )

17(4x1 +2x2 7x3)

0

2,2

-1,66667

2,428571

5,761905

-4,62857

12,13333

1

1,047619

-0,12381

0,695238

-4,81905

2,885714

-7,69524

2

2,011429

-1,08571

1,794558

3,023129

-2,06313

5,779048

3

1,406803

-0,398

0,96898

-2,201

1,430204

-3,79392

4

1,847002

-0,87474

1,510969

1,495458

-0,98219

2,714268

5

1,547911

-0,54734

1,123216

-1,04254

0,686844

-1,85116

6

1,75642

-0,77629

1,387667

0,722347

-0,47296

1,291932

7

1,61195

-0,61864

1,203106

-0,49987

0,329031

-0,89318

8

1,711924

-0,72831

1,330703

0,346952

-0,22757

0,619249

9

1,642533

-0,65246

1,242239

-0,24018

0,157855

-0,42928

10

1,690569

-0,70508

1,303564

0,166561

-0,10936

0,297379

11

1,657257

-0,66862

1,261082

-0,11539

0,075795

-0,20616

12

1,680335

-0,69389

1,290533

0,079981

-0,05253

0,142842

13

1,664339

-0,67638

1,270127

-0,05543

0,036402

-0,099

14

1,675424

-0,68851

1,28427

0,038412

-0,02523

0,068608

15

1,667741

-0,6801

1,274469

-0,02662

0,017484

-0,04755

16

1,673065

-0,68593

1,281261

0,018448

-0,01212

0,032952

17

1,669376

-0,68189

1,276554

-0,01279

0,008397

-0,02284

18

1,671933

-0,68469

1,279816

0,00886

-0,00582

0,015826

19

1,670161

-0,68275

1,277556

-0,00614

0,004033

-0,01097

20

1,671389

-0,68409

1,279122

0,004255

-0,00279

0,007601

21

1,670538

-0,68316

1,278037

-0,00295

0,001937

-0,00527

22

1,671128

-0,68381

1,278789

0,002044

-0,00134

0,003651

23

1,670719

-0,68336

1,278268

-0,00142

0,00093

-0,00253

24

1,671002

-0,68367

1,278629

0,000982

-0,00064

0,001753

25

1,670806

-0,68346

1,278378

-0,00068

0,000447

-0,00122

26

1,670942

-0,68361

1,278552

0,000471

-0,00031

0,000842

27

1,670847

-0,6835

1,278432

-0,00033

0,000215

-0,00058

28

1,670913

-0,68357

1,278515

0,000226

-0,00015

0,000404

29

1,670868

-0,68352

1,278457

-0,00016

0,000103

-0,00028

30

1,670899

-0,68356

1,278497

0,000109

-7,1E-05

0,000194

31

1,670877

-0,68353

1,27847

-7,5E-05

4,95E-05

-0,00013

32

1,670892

-0,68355

1,278489

5,22E-05

-3,4E-05

9,33E-05

Таблица.3.1. Итерации Таким образом, вектор ответов:

x1x2

x3

=1,670892

=0.68355 ;

=1.278489

Теперь представим решение в системе Scilab.

46

Листинг 3.3.

e = 0.0001; // установим точность z_prev = 1000000; // фиктивное значение

f = mopen('C:\Matrix.txt','r'); n = mfscanf(f,'%d');

m = mfscanf(f,'%d'); for i = 1:n

for j = 1:m

a(i,j) = mfscanf(f,'%g'); end

end mclose(f);

//проверка на сходимость for i = 1:n

for j = 1:n

if abs(a(i,j)) > abs(a(i,i)) disp('Система расходится'); return;

end end

end

//будущий вектор ответов

for i = 1:n x(i) = 0.0;

end

while 5 < 7 for i = 1:n

x_1(i) = 0.0; end

z = 0; z_1 = 0; z_2 = 0; for i = 1:n

z = z + a(1,i)*x(i);

z_1 = z_1 + a(2,i)*x(i); z_2 = z_2 + a(3,i)*x(i);

end

z = a(1,m)-z;

z_1 = a(2,m)-z_1; z_3 = a(3,m)-z_2;

if abs(z) < e & abs(z_1) < e & abs(z_1) < e disp('Вектор ответов');

x return;

end

// реализуем формулу (*) for i = 1:n