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

ЭВМ_Семестр3_МетодПособие

.pdf
Скачиваний:
24
Добавлен:
05.06.2015
Размер:
2.99 Mб
Скачать

вестные, за конечное (зависящее от n) число арифметических действий и при вычислениях без округлений дают точное решение. Итерационные методы будут рассмотрены в разделе 3.

2.1.2 Метод Гаусса (метод исключения неизвестных)

Метод Гаусса является прямым методом решения систем линейных уравнений. Его идея состоит в том, что исходную систему (2.1) с помощью равносильных преобразований приводят к другой, более простой системе (с верхней треугольной матрицей), для которой несложно вычислить неизвестные. И поскольку преобразования равносильные, то вычисленные неизвестные являются также решением исходной системы. Вырожденность системы обнаруживается (при точных вычислениях) в процессе решения.

Разберѐм метод на примере решения представленной далее системы уравнений (I),(II),(III) с действительными коэффициентами; слева даѐтся запись системы в общем виде.

Прямой ход метода Гаусса

 

a11x1 a12 x2

a13x3

b1

 

 

 

 

(a11 0)

 

 

2x1

1x2

1x3

 

1

(I)

 

a 21x1

a 22 x2

a 23x3

b2

 

l21 a 21

a11 4

2 2

 

4x1

3x2

 

0x3

 

2

(II)

 

 

 

 

 

 

a

31

x

a

32

x

2

a

33

x

3

b

l

31

a

31

a

11

2

2 1

2x

2x

2

3x

3

9 (III)

 

 

1

 

 

 

 

3

 

 

 

 

 

 

1

 

 

 

 

Решение системы начинается с прямого хода, который выполняется по шагам.

На 1-ом (k=1) шаге прямого хода перепишем 1-ое (k-ое) уравнение без изменений. С помощью этого уравнения исключим неизвестное

xk x1 из последующих уравнений. Для этого предварительно вычислим множители li,k l21 и li,k l31 - второй индекс «k» соответствует k-му шагу, а первый индекс «i» указывает на уравнение, к которому относится вычисленный множитель. Затем преобразуем (II)-oe уравнение по схеме: (II) l2,1 (I) = (IIʹ), т.е. вычтем из (II)-го уравнения

(I)-ое, предварительно умноженное (почленно) на множитель l2,1 . После этого в преобразованном уравнении (II'), коэффициент при x1 оказывается равным нулю, т.к.

a 21x1 l21a11x1 a 21 l21a11 x1 a 21 a 21 a11 a11 x1 0 x1 0 ,

41

Для других коэффициентов и правой части имеем:

 

 

a

x l a x

a

22

l a x a

, x

;

 

 

 

 

 

 

 

 

 

 

 

22

2

 

 

21

12

2

 

 

21

12

2

22

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a23x3 l21a13x3 a

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

23 l21a13 x3 a

23 x3 ;

b2 l21b1 b2.

Действуя аналогично по схеме (III)

l31

(I) = (IIIʹ)

 

исключаем x1 из

третьего уравнения. Результат действий после 1-го шага таков:

 

a11x1 a12 x2

 

a13x3

b1

 

 

 

 

 

 

 

2x1 1x2 1x3

1

(I)

 

a

x

 

 

a

x

 

b

 

 

 

(a 0)

 

 

1 x

 

2x

 

0

(II ) (II) - 2 (I)

 

2

3

 

 

 

 

 

2

3

22

 

 

23

 

 

2

 

 

 

 

22

 

 

 

 

 

 

 

 

 

 

a

x

2

a

x

3

b

l

32

a

a

3 1 3

 

3x

2

4x

3

10

(III ) (III) 1 (I)

 

32

 

 

33

 

 

3

 

 

32

22

 

 

 

 

 

 

 

 

 

 

На 2-ом (k=2) шаге с помощью второго уравнения (IIʹ) производится

исключение xk

x2 из последующего (IIIʹ)-гo уравнения; коэффици-

ент l32 для

исключения указан слева от уравнения (IIIʹ)

Этим завершается прямой ход метода Гаусса, в результате которого получается система уравнений с верхней треугольной матрицей.

a

11x1

a12 x2

a13 x3

b1

 

2x1 1x2

1x3

 

1

(I)

 

 

a

x

 

a

x

 

b

 

1 x

 

2x

 

 

0

(II )

 

 

2

3

 

2

3

 

22

 

23

 

2

 

 

 

 

 

 

 

 

 

a

x

3

b

 

 

 

10x

3

10

(III ) (III ) 3 (II )

 

 

 

 

 

33

 

3

 

 

 

 

 

 

 

Обратный ход метод Гаусса (обратная подстановка)

Из уравнения (IIIʹʹ):

x b a

a

0

;

x 10 10 1

.

3 3 33 ;

33

 

3

 

Из уравнения (IIʹ):

 

 

 

 

 

 

0 ;

x2 0 ( 2) 1 1 2 .

x2 b2

a23x3

a22

; a22

Из уравнения (I):

 

x1 b1

a12x2

a13x3 a11 ;

x1 1 1 2 1 1 1 1.

Т.е. обратный ход метода Гаусса заключается в том, что найденное из последнего уравнения (IIIʹʹ) неизвестное x3 , подставляется в предыдущее уравнение (IIʹ), что позволяет вычислить x2 . А подстановка найденных значений в (I)-ое уравнение позволяет определить и x1 .

Отметим, что произведение нижней треугольной матрицы L, дополненной единицами по главной диагонали, на полученную верхнюю треугольную матрицу U даѐт исходную матрицу A:

1

 

 

2

1

1

2

1

1

 

LU

2

1

 

 

1

2

 

4

3

0

A

 

 

 

 

 

 

 

 

 

 

 

 

 

1 3

1

 

 

10

 

2

2

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

42

ak( k, k)

То есть при решении для матрицы A фактически выполнено LU-разложение, которое является основой важных алгоритмов решения СЛАУ.

Главные элементы и вырожденность системы При вычислениях отмечалось, что диагональные элементы мат-

рицы , которые использовались на k-ом шаге для исключения неизвестных и на которые выполнялось деление, не должны равняться нулю. Если среди этих элементов, называемых главными или ведущими, окажутся нулевые как в следующей задаче

0z1 3z2 4z3 2;

 

 

 

 

1z2 2z3 1;

z1 ? z2

? z3 ? ,

 

1z1

(2.4)

 

2z2 2z3 9;

 

 

 

3z1

 

 

 

то рассмотренный алгоритм не сработает, так как l21 a21a11 10 .

Но можно заметить, что

(2.4) – это всѐ та же, ранее рассмотренная и

решѐнная система,

для

которой здесь выполнена замена z1 x3 ,

z3 x1 (в матрице

смена обозначений проявилась перестановкой

1-го и 3-го столбцов). Кроме того, в исходной системе (I)-(III) были переставлены 1-ое и 2-ое уравнения (строки в расширенной матрице, включающей столбец правых частей), в результате чего нулевой элемент оказался главным элементом.

Поэтому сам напрашивается способ решения задачи (2.4) – так переставить уравнения (или строки в расширенной матрице), чтобы главные элементы были не нулевыми. Однако деление на не нулевые, но достаточно малые по абсолютной величине главные элементы, вызовет большое увеличение используемых при исключении множителей li,k перед вычитаемым уравнениями. В результате чего коэффициенты в вычитаемом уравнении могут на много порядков превысить (по абсолютной величине) коэффициенты в уменьшаемом (уравнении). Это может привести к резкой потере точности при численном решении. Из этих соображений перед выполнением исключения на k-ом шаге прямого хода выбирают для перестановки из уравнений (с k-го по n-ое) уравнение с наибольшим по абсолютной величине элементом в k-ом столбце. Дополненный такой процедурой алгоритм

43

решения

системы

линейных

уравнений

называют:

метод Гаусса с выбором главного

элемента по столбцу.

Важные замечания

1. Если в результате выбора главного элемента по столбцу он всѐ же оказался нулевым, то это означает, что система вырожденная. Раскрыв определитель (абсолютная величина которого при преобразованиях метода Гаусса не меняется) по 1-му столбцу, например, у матрицы следующей системы

a11x1

0

Шаг k=2

0

a12 x2 a13x3 0 x2 a 23x3 0 x2 a33x3

b1

b ,

2

b

3

убеждаемся, что он равен нулю. При компьютерных вычислениях с погрешностями округления о близости СЛАУ к вырожденной судят

по оценкам безразмерного числа обусловленности cond (A) AA 1

матрицы системы, где A норма матрицы (см. в следующей разделе). 2. Если прямой ход метода Гаусса доведѐн до конца и матрица системы приведена к верхней треугольной, то произведение еѐ диагональных элементов даѐт значение определителя, причѐм, если было произведено нечѐтное число p перестановок строк, то произведение берѐтся с противоположным знаком. Например, для системы (I)-(III):

 

 

 

 

2

1

1

 

 

det(A) a

a

a

( 1) p

0

1

2

2 1 10 1 p 20;

p 0.

11

22

n,n

 

 

 

 

 

 

 

 

 

 

0

0

10

 

 

 

 

 

 

 

 

 

 

 

3. В результате длительных поисков математики всѐ же нашли примеры матриц, для которых машинные решения СЛАУ с выбором главного элемента не по всей матрице, а по ведущему столбцу приводят к неустойчивости решения, однако в вычислительной практике мало используют более трудоѐмкий выбор главных элементов по всей матрице.

44

2.1.3 Решение СЛАУ методом Гаусса с выбором главных элементов по столбцу

Приведѐм решение рассмотренной выше системы, в котором для гарантии вычислительной устойчивости перед исключением неизвестных из уравнений с k го по n ое выбирают и переставляют с k ым (I-ым на шаге k=1) то уравнение (II-ое см. решение), в котором

коэффициент (главный элемент) при неизвестном

xk наибольший по

абсолютной величине. Шаг k=1:

 

 

 

 

 

 

 

 

 

2x1

1x2

1x3

1

(I)

4x1

3x2

 

0x3

 

2

(II)

 

 

 

 

 

 

 

3x2

0x3

2

 

 

 

 

 

 

 

 

 

 

4x1

(II) перестановка уравн.

2x1

1x2

1x3

 

1

(I)

 

 

2x1

2x2 3x3 9 (III)

2x

2x

2

3x

3

9 (III)

 

 

 

 

 

 

1

 

 

 

 

Исключение неизвестного xk x1 выполняют по схеме, заданной в нумерации уравнений:

 

4x1 3x2

0x3

2

(II)

 

4x1

3x2

0x3

2

(II)

 

2x 1x

2

1x

3

1

(I ) I - (2/4) (II)

 

 

0 0.5x

2

1x

3

0

(I )

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2x 2x

 

3x

 

9

(III ) (III) ( 2/4) (II)

 

 

 

 

 

 

3x

 

 

10

(III )

 

2

3

 

0 3.5x

2

3

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

На втором ( k 2 ) шаге также сначала выбирается главный элемент

среди коэффициентов при неизвестном

xk x2

среди уравнений с

k го по n ое и переставляют местами строки так, чтобы строка с

главным элементом стала k ой . Шаг k=2:

 

 

 

4x1 3x2

0x3

2

(II)

4x1 3x2

0x3

2 (II)

 

1x3

0

 

 

3.5x2

3x3

10(III )

0 0.5x2

(I ) перестановка уравн. 0

 

3x3 10

(III )

 

0.5x2

1x3

0 (I )

0 3.5x2

0

Затем выполняют исключение неизвестного xk

x2 из строк с k 1 ой

по n ую (здесь из 3-ей строки) по схеме:

 

 

 

 

 

4x1 3x2

0x3

2

(II)

 

4x1 3x2

0x3

2

(II)

 

3.5x2

3x3

10

(III )

 

0 3.5x2

3x3

10

(III )

0

 

 

0.5x2

1x3

0

(I ) (I ) - (-0.5/3.5) (III )

 

 

 

1.43

(I )

0

0 0x2 1.43x3

Этим завершается прямой ход метода исключения Гаусса.

Обратный ход (или обратная подстановка) состоит в вычислении xn x3 из последнего уравнения: xn x3 1.43/1.43 1, а затем его подстановки в уравнения, расположенные выше, и вычислении сначала

45

x2 (10 3 x3 ) / 3.5 (10 3 1) / 3.5 2 из 2-го уравнения, а затем и x1 (2 3x2 0 x3 ) / 4 (2 3 2 0) / 4 1 из 1-го уравнения.

2.1.4 Характеристики метода Гаусса (прямых методов)

Число арифметических операций, выполняемых при решении СЛАУ по рассмотренному алгоритму метода Гаусса, выражается (для больших n) формулой 2n3/3, в которой опущены слагаемые с меньшими степенями при n.

Относительная погрешность вычисления неизвестных зависит от числа обусловленности cond (A) матрицы системы, от числа t разрядов (обычно двоичных, т.е. s=2), отводимых для хранения мантис-

сы

 

 

 

 

 

 

 

 

 

 

чисел,

и

 

оценивается

формулой

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

k f (n) cond (A) s

t

, в которой

 

 

 

 

 

 

- норма вектора –

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x x*

 

 

 

 

 

 

 

x*

 

 

 

 

 

x

 

 

 

 

общая мера вектора (в частности, длина вектора тоже есть норма). Коэффициент k порядка единицы (обычно не превышает s), а f (n) n32 , причѐм степень можно существенно уменьшить (до ½), если вычислять скалярные произведения с двойной точностью. Отметим, что повысить точность полученного приближѐнного реше-

~

(добавкой x ) с помощью итерационного уточнения – повтор-

ния x

ного решения системы

~

b

(где

~

~

A x b

b

Ax ) – можно лишь

увеличив точность вычисления главной составляющей (повторного) решения - вычисления скалярного произведения.

Рассмотренный алгоритм (и алгоритмы с LU-разложением) применяют для решения систем с плотно заполненными матрицами. Для часто встречающихся в технике положительно определѐнных матриц и матриц специальной структуры, в частности, ленточных, используются эффективные модификации разложений прямыми методами. Для больших разреженных матриц более эффективными считаются итерационные методы.

2.2Программное обеспечение

ВExcel не включена функция, непосредственно предназначенная для решения СЛАУ. И хотя решение можно получить через обращение матрицы, но это не правильный путь – более трудоемкий и менее

46

точный. Сравните два способа вычисления x из одного уравнения 3x=6: через обращение x=(1/3)*6 и простое деление x=6/3. Поэтому для решения в Excel СЛАУ методом Гаусса в лаборатории можно использовать (из папки C:\Materials\VBA_Excel) модуль Math.bas, в который нами включены процедура KGAUSS и функция xCdGauss, определѐнная пользователем. Процедуру KGAUSS можно вызывать из макроса; еѐ заголовок (и текст см. в Math.bas):

Sub KGAUSS(ByRef Ab( ) As Double, ByVal N As Long, _

ByRef x( ) As Double, ByRef IAI As Long) , где:

Ab(? To N, ? To N+1) – расширенная (включающая столбец правой части) матрица системы (?={0| 1}),

N – макс. индекс в первой размерности у массивов Ab и x.

x(? To N) – вектор решения,

IAI ~ признак вырожденности: IAI=0

– гл. элемент 0, IAI=1 – не 0.

Функция, определѐнная пользователем, xCdGauss используется следующим образом. Для решения СЛАУ с расширенной матрицей A1:D3 коэффициентов, например,

показанной в таблице 2.1, выделяется горизонтальный диапазон, например, A4:D4 из N+1 ячеек (N=3 – число уравнений). Затем нажимают клавишу F2 и выбирают в ленте: Формулы,

Вставить функцию, Категория -

Рисунок 2.4.

Таблица. 2.1.

 

 

 

A

 

 

B

 

 

 

C

 

 

D

 

 

1

 

2

 

1

1

7

 

 

2

 

4

 

3

0

10

 

 

3

 

-2

 

2

3

11

 

 

4

 

1

 

 

2

 

 

 

3

 

 

10,72727

 

Определѐнные пользователем,

xCdGauss, OK. В возникшем окне Аргументы функции (см. рис. 2.1) указывают для аргумента Ab диапазон A1:D3 ячеек с коэффициентами расширенной матрицы СЛАУ, а затем нажимают Ctrl+Shift+Enter. В ячейках A4:C4 появятся вычисленные значения неизвестных СЛАУ, а в ячейке D4 число обусловленности матрицы системы.

47

Из MatLab для решения СЛАУ можно использовать функцию linsolve в команде: x=linsolve(A, b). Она использует в решении LUразложение матрицы. Заметим, что на месте вектора b можно указать матрицу из нескольких различных векторов (для нескольких СЛАУ с одинаковой матрицей A - в технике это соответствует различным нагружениям одной и той же системы). При решении выполняется одно единственное LU-разложение матрицы и обратные подстановки для всех векторов.

2.3 Задание к расчетно-графической работе №2

1.Для предложенного варианта СЛАУ выполнить (в Excel) пошаговое решение методом Гаусса с выбором главного элемента по столбцу. Перенести в отчѐт результаты шагов решения.

2.Проверить полученное в п.1 решение СЛАУ с помощью «стандартных» программных средств: вычислениями в MatLab, выполнением процедур и функций в Excel. Описать в отчѐте этапы и результаты выполненной проверки.

Пример выполнения варианта задания

1.Описание пошагового решения в Excel СЛАУ методом Гаусса

(с выбором главных элементов по столбцу)

Для изучения решения СЛАУ методом Гаусса в Excel следует скопировать в свою папку и запустить файл C:\Materials\ VBA_Excel\GaussMethod.xlsm, с которым подключаются три макроса:

E - формирует единичную матрицу,

L – нормирует вектор-столбец делением на первый элемент, x – решает систему с верхней треугольной матрицей.

Они запускаются щелчком мыши по световой круглой кнопке возле надписи с соответствующей буквой (см. таблицу 2.2). Единичную матрицу можно также вызвать, запустив в MatLab (из Excel) выполнение функции eye(n). Перестановки и исключения выполняются умножением на вспомогательные матрицы, которые формируются вручную из единичной. Так для выполнения перестановок 1-ой и

48

2-ой строк расширенной матрицы Ab надо слева на неѐ умножить единичную, у которой в этих строках единицы с главной диагонали сдвинуты во 2-ой и 1-ый столбцы.

При пошаговом решении СЛАУ в Excel (на этапе 1 ) расширенную матрицу Ab1 помещаем в диапазон G2:J4 (см. таблицу 2.2). В 1-ом столбце Ab1 главный элемент равен 4, он находится во 2-ой

строке. В соответствии с этим, (на этапе

2

) слева в ячейках B2:D4

набиваем (или переделываем из единичной)

матрицу

перестановок

P1, которая будет задавать перестановки 1-ой и 2-ой строк. Под мат-

 

 

 

 

 

рицей Ab1 (в диапазоне G6:J8) размещаем (на этапе

3

) матрицу, ко-

торая получится как результат умножения P1 на Ab1.

 

Таблица 2.2

 

A

B

C

D

E

 

F

G

H

I

 

J

1

 

Матрица перестановок (шаг k=1)

2

 

Расширенная матрица СЛАУ

1

2

 

0

1

 

0

 

 

2

1

1

 

7

3

P1=

1

0

 

0

 

Ab1=

4

3

0

 

10

4

 

0

0

 

1

 

 

-2

2

3

 

11

5

 

Матрица исключений (шаг k=1)

4

 

Строки переставлены (шаг k=1)

3

6

 

1

0

 

0

 

 

4

3

0

 

10

7

L1=

-0,5

1

 

0

 

P1*Ab1=

2

1

1

 

7

8

 

0,5

0

 

1

 

 

-2

2

3

 

11

9

 

Матрица перестановок (шаг k=2) 6

 

Матрица СЛАУ после шага k=1

5

10

 

1

0

 

0

 

 

4

3

0

 

10

11

P2=

0

0

 

1

 

Ab2=L1*(P1*Ab1)=

0

-0,5

1

 

2

12

 

0

1

 

0

 

 

0

3,5

3

 

16

13

 

Матрица исключений (шаг k=2)

8

 

Строки переставлены шаг k=2

7

14

 

1

0

 

0

 

 

4

3

0

 

10

15

L2=

0

1

 

0

 

P2*Ab2=

0

3,5

3

 

16

16

 

0

0,14286

 

1

 

 

0

-0,5

1

 

2

17

 

 

 

 

 

 

 

Матрица СЛАУ после шага k=2

9

18

 

 

 

 

 

 

 

4

3

0

 

10

19

 

 

 

 

 

 

Ab3=L2*(P2*Ab2)=

0

3,5

3

 

16

20

 

 

 

 

 

 

 

0

0

1,4286

4,2857

 

 

 

 

 

 

 

21

10 Решение СЛАУ с верхней треугольной матрицей x1,x2, x3=

1

2

3

 

 

 

 

 

 

 

 

Напомним, как выполняется в Excel умножение матриц. Для этого: выделяем G6:J8, нажимаем F2, в ячейку G6 вставляем как формулу функцию МУМНОЖ. Вызвав эту функцию, указываем сначала диапазон B2:D4 первой матрицы, а затем – второй G2:J4. Для записи матрицы результата в диапазон, начинающийся в ячейке G6, следует нажать Ctrl+Shift+Enter.

49

x1 , x2 ,

После получения матрицы P1*Ab1 с переставленными 2-ой и 1-ой строками готовим (на этапе 4 ) слева матрицу L1 для исключения неизвестных из строк со 2-ой по 3-ью (c k+1 по n) первого столбца. Для этого выделяем диапазон B6:D8 (строк c k по n) и запускаем макрос E создания единичной матрицы (по Ctrl+Shift+E или кликнув по кружку E - фигуры, с которой мы связали этот макрос). Затем выделяем в матрице P1*Ab1 1-ый столбец (G6:G8) с главным элементом. Копируем значения из G6:G8 и, выделив B6:B8, помещаем специальной вставкой (значения) в столбец единичной матрицы. Не сбрасывая выделение B6:B8, запускаем (по Ctrl+Shift+L или кликнув по L-кружку фигуры) макрос Lk нормирования этого вектора. В результате получаем

показанную в таблице 2.2 (для этапа 4 ) матрицу L1. После умножения (на этапе 5 ) этой матрицы на расширенную матрицу P1*Ab1

(диапазон G6:J8) заносим в G10:J12 матрицу

произведения

Ab2=L1*(P1*Ab1) с исключенным неизвестным x1 из G11:G12.

 

Аналогичным образом действуем далее (на этапах 6

, 7 ,

8 , 9 )

до получения матрицы Ab3 (G18:J20), у которой все элементы под главной диагональю (левой (3х3)-подматрицы Ab3) равны нулю. Расширенная матрица Ab3 соответствует СЛАУ с верхней треугольной матрицей; она просто решается последовательным вычислением

x3 - обратной подстановкой. Еѐ алгоритм реализован в макросе TrSolve, который запускаем по Ctrl+Shift+x (или кликнув по соответствующему x-кружку фигуры) при предварительно выделенной расши-

ренной матрице (G18:J20) и выводим (на этапе 10 ) вычисленные неизвестные x1 , x2 , x3 системы в ячейки G21:I21 под соответствующими столбцами верхней треугольной матрицы Ab3.

50