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

38

Глава_3.

Решение систем линейных алгебраических уравнений

1) МЕТОД ГАУССА

Имеем систему уравнений:

A11*x1

+

A12 *x2

+

....

+

A1n *xn

=

B1 ;

A *x

+

A *x

+

....

+

A

*x

=

B ;

21

1

 

22

2

 

 

 

2n

 

n

 

2

 

 

 

 

....

 

....

 

 

....

 

....;

....

 

 

 

 

 

A

*x

+

A

*x

+ ....

A

 

*x =

B

;

n11

1

 

n12

2

 

 

 

n1n

 

n

n1

 

 

 

+

`An2 *x2

+

....

+

Ann *xn

=

Bn ;

An1 *x1

Идея метода состоит в том, чтобы последовательно исключать неизвестные из уравнений с тем, чтобы последнее уравнение стало уравнением с одним неизвестным. Это прямой ход метода Гаусса. Первый его шаг состоит в том, чтобы исключить переменную x 1 из

второго, третьего, …. , n - ного уравнения. Это можно сделать, умножив

1 - вое уравнение на коэффициент A21 , и вычесть его (уравнение) из

A11

2 - ого уравнения. Аналогично поступим со следующими уравнениями,

используя коэффициент A21 . Нетрудно заметить, что при таком

Ai1

преобразовании коэффициенты при x1 в этих уравнениях обращаются в 0. Повторяя процедуру n 1 раз и исключая переменные x2 , x3 ,... из следующих строк, мы приведем систему к треугольной форме:

S *x

+

S *x

+

 

....

+

 

S

*x

=

C ;

11 1

 

12 2

 

 

 

 

 

1n

 

n

 

1

 

0

+

S22*x2

+

 

....

+

 

S2n *xn

=

C2 ;

 

 

....

 

 

....

 

 

 

....

 

....;

 

....

 

 

 

 

 

 

 

 

0

+

0

+

....

+ S

 

*x

S

 

*x =

C

;

 

 

 

 

 

n1n1

n1

n1n

 

n

n1

 

 

+

`0

+

 

....

+ 0

Snn*xn

=

Cn ;

0

 

Теперь совершаем обратный ход метода Гаусса:

39

Из n - ного уравнения

xn =

Cn

подставим в ( n 1) – вое уравнение,

 

находим xn1 и т.д.

 

Snn

 

 

 

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

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

x1 + x2 + 3x3 = 72x1 + x2 x3 =53x1 + 5x2 7x3 =9

7

Замечание: вектор 5 - называется вектором свободных членов.

9

Работаем с матрицей коэффициентов данного уравнения:

1

1

3

 

7

 

 

2

1

1

 

 

 

умножаем первую строку матрицы на 2 и вычитаем из

 

 

5

 

 

 

 

 

 

 

 

3

5

7

 

 

 

 

9

 

второй строки (после чего, для удобства, снова делим первую строку матрицы на 2, чтобы она осталась прежней); затем умножаем первую строку матрицы на 3 и вычитаем из 3 - ей строки, имеем:

1

1

3

7

 

 

 

0

1 7

 

 

9

 

начинаем второй шаг прямого хода метода Гаусса:

 

 

 

 

 

 

 

 

 

 

 

0

2

16

 

 

 

 

 

12

 

умножаем вторую строку матрицы на -2 и вычитаем ее из третьей строки, имеем:

1

1

3

 

7

 

 

 

 

 

 

 

 

0

1

7

 

 

9

 

 

вот и закончен прямой ход метода.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

0

30

 

 

 

 

 

 

 

 

 

 

30

 

 

 

30

 

Начинаем обратный ход: x

 

=

=1,

3

 

имеем:

 

 

 

 

 

 

 

 

 

30

 

 

7

 

 

 

 

 

 

 

1

1

3

 

 

 

 

 

 

 

 

 

0

1

7

 

 

9

 

умножаем третью строку матрицы на -7 и вычитаем ее

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

0

1

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

из второй строки, (не забываем, как умножили на -7 и вычли третью строку из второй, так снова третью строку лучше поделить на -7)

имеем:

40

1

1

3

 

7

 

 

 

 

0

1

0

 

 

x2 = 2

= 2 . Теперь аналогичными преобразованиями

 

2

 

 

 

 

 

 

 

1

 

0

0

1

 

 

 

 

 

 

1

 

 

 

получим окончательно:

1

0

0

2

 

 

 

 

0 1

0

 

 

, т.е. x1

= 2, x2

= 2, x3 =1

 

2

 

0

 

 

 

 

 

 

 

 

0 1 1

 

 

 

 

Имеем вектор ответов:

x1 = 2x2 = 2 ;x3 =1

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

Матрица читается из файла (см. рис.3.1). Организуем цикл по i, начиная с первой строки матрицы до последней. Выбор главного элемента для начала можно и опустить, но в этом случае, если первый коэффициент окажется равным 0, у нас могут возникнуть проблемы.

Внутри этого цикла организуем цикл по j для перебора последующих строк матрицы коэффициентов, причем, если коэффициент a(i, i) верхней строки равен 0, мы считаем, что определитель системы равен нулю и система несовместна, в связи с чем дальнейшие вычисления не имеют смысла.

Рис.3.1. Матрица коэффициентов

Листинг 3.1 (метод Гаусса)

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

m = mfscanf(f,'%d');

41

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

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

end mclose(f);

// прямой ход метода Гаусса for i = 1:n

z = abs(a(i,i)); j = i;

//для повышения точности осуществим выбор

//главного элемента, т.е. найдём строку с максимальным

//значением коэффициента a(k,i) и обменяем строки уравнения так,

//чтобы уравнение с максимальным по модулю первым

//коэффициентом было верхним

for k = i+1:n

q = abs(a(k,i)); if q > z

z = q; j = k;

end end

if j != i

for k = i:n+1

// обмен строк

z = a(i,k); a(i,k) = a(j,k); a(j,k) = z; end

end

for j = i+1:n q = a(i,i); if q == 0.0

disp('система несовместна'); return;

end

z = a(j,i)/q; for k = i:n+1

a(j,k) = a(j,k)-a(i,k)*z; end

end end

k = n;

q = a(k,k); if q == 0.0

disp('система несовместна'); return;

end

// обратный ход метода Гаусса x(k) = a(k,m)/q;

i = k-1;