АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

П 3.2 Метод Гаусса с выбором главного элемента для решения систем линейных алгебраических уравнений

Читайте также:
  1. A) к любой экономической системе
  2. A) прогрессивная система налогообложения.
  3. C) Систематическими
  4. CASE-технология создания информационных систем
  5. ERP и CRM система OpenERP
  6. HMI/SCADA – создание графического интерфейса в SCADА-системе Trace Mode 6 (часть 1).
  7. I Понятие об информационных системах
  8. I СИСТЕМА, ИСТОЧНИКИ, ИСТОРИЧЕСКАЯ ТРАДИЦИЯ РИМСКОГО ПРАВА
  9. I этап Подготовка к развитию грудобрюшного типа дыхания по традиционной методике
  10. I. ГИМНАСТИКА, ЕЕ ЗАДАЧИ И МЕТОДИЧЕСКИЕ ОСОБЕННОСТИ
  11. I. Методические основы
  12. I. Методические основы оценки эффективности инвестиционных проектов

 

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

 

(1)

 

или в матричном виде AX = f, (2)

где А – вещественная квадратная матрица порядка n, f – заданный
и X – искомый векторы. Будем предполагать, что определитель матрицы отличен от нуля.

В методе Гаусса возможность проведения процесса исключения гарантируется условием неравенства нулю главных миноров матрицы А

, , …, .

 

Однако при вычислениях заранее неизвестно, все ли главные миноры матрицы А отличны от нуля. При этом может оказаться, что система (1) имеет единственное решение, несмотря на то, что какой-либо из главных миноров матрицы А равен нулю. Кроме того, фиксация ведущего элемента в случае его относительной малости может привести в процессе вычислений к сильному накоплению погрешностей. Избежать таких ситуаций позволяет метод Гаусса с выбором главного элемента.

Основная идея метода Гаусса с выбором главного элемента состоит в том, чтобы на очередном шаге исключать не следующее по номеру неизвестное, а то неизвестное, коэффициент при котором является наибольшим по модулю. Таким образом, в качестве ведущего элемента здесь выбирается главный, т.е. наибольший по модулю элемент.

На практике обычно используются следующие варианты метода Гаусса с выбором главного элемента [19]:

1) метод Гаусса с выбором главного элемента по строке.Ведущий элемент на k -ом шаге исключения выбирается как максимальный по модулю среди элементов k -ой строки. Это равносильно перенумерации переменных на каждом этапе исключения;

2) метод Гаусса с выбором главного элемента по столбцу.Ведущий элемент на k -ом шаге исключения выбирается как главный элемент k -ого столбца. Такой вариант метода Гаусса предусматривает перенумерацию уравнений на каждом этапе исключения;

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

 

Пример 1. Решить систему уравнений методом Гаусса с выбором главного элемента по столбцу.

Решение:

Прямой ход.

Максимальным по модулю среди элементов первого столбца является элемент второй строки . Переставим 1-е и 2-е уравнения, переместив, таким образом, выбранный элемент на место ведущего.

 

Проводим первый шаг исключения, как в методе Гаусса. Имеем

Максимальным по модулю среди элементов второго столбца является элемент третьей строки . Переставим 2-е и 3-е уравнения. Получим

Проводим второй шаг исключения. Имеем

Разделим третье уравнение на 6.002, получим

В результате применения обратного хода, имеем , , .

Рассмотрим метод Гаусса с выбором главного элемента на основе факторизации.

Матрицей перестановок Р называется квадратная матрица, у которой в каждой строке и в каждом столбце только один элемент отличен от нуля и равен единице.

Элементарной матрицей перестановок называется матрица, полученная из единичной матрицы перестановкой k -й и l -й строк.

Например, элементарными матрицами перестановок третьего порядка являются матрицы

 

, , .

 

Отметим следующие свойства элементарных матриц перестановок, вытекающие непосредственно из их определения [19]:

· Произведение двух (а следовательно, и любого числа) элементарных матриц перестановок является матрицей перестановок (не обязательно элементарной).

· Для любой квадратной матрицы А матрица отличается от А перестановкой k -й и l -й строк.

· Для любой квадратной матрицы А матрица отличается от А перестановкой k -го и l -го столбцов.

Поясним применение элементарных матриц перестановок для описания метода Гаусса с выбором главного элемента по столбцу. Рассмотрим следующий пример системы третьего порядка:

(3)

 

Матрица системы имеет вид

 

. (4)

 

Максимальный элемент первого столбца матрицы А находится во второй строке. Поэтому в системе (3) необходимо поменять местами первую и вторую строки и перейти к эквивалентной системе

(5)

Систему (5) можно записать в виде

 

, (6)

 

т.е. система (6) получается из системы (3) путем умножения на матрицу перестановок .

Далее, к системе (5) надо применить первый шаг обычного метода исключения Гаусса, для того чтобы привести матрицу системы к виду .

Этот шаг эквивалентен умножению матрицы системы (6) слева на элементарную нижнюю треугольную матрицу ,

т.е. в нашем случае .

В результате от (6) перейдем к системе

 

. (7)

Имеем:

(8)

Из последних двух уравнений системы (8) необходимо исключить неизвестное х2. Максимальным элементом второго столбца системы (8) является элемент третьей строки. Следовательно, в системе (8) необходимо поменять местами вторую и третью строки и тем самым перейти к эквивалентной системе (9)

(9)

которую можно записать в матричном виде как

 

. (10)

Таким образом, система (10) получена применением к системе (7) элементарной матрицы перестановок .

Далее, к системе (10) необходимо применить второй шаг исключения обычного метода Гаусса, для того чтобы привести матрицу системы к виду .

Этот шаг эквивалентен умножению матрицы системы (10) слева на элементарную нижнюю треугольную матрицу ,

т.е. для данного примера .

 

В результате получим систему

 

(11)

или

(12)

Заключительный шаг прямого хода метода Гаусса состоит в замене последнего уравнения системы (12) уравнением

.

Что эквивалентно умножению (11) на матрицу ,

т.е в нашем случае .

Таким образом, для рассмотренного примера процесс исключения Гаусса с выбором главного элемента по столбцу записывается в виде

 

. (13)

В результате получим систему

(14)

По построению матрица

 

(15)

 

является верхней треугольной матрицей с единичной главной диагональю.

Для нахождения неизвестных к системе (14) применяется обратный ход обычного метода Гаусса.

Отличие метода Гаусса с выбором главного элемента по столбцу (строке, всей матрице) от обычного метода Гаусса состоит в том, что в качестве сомножителей в (15) наряду с элементарными треугольными матрицами Lk могут присутствовать элементарные матрицы перестановок Рkl.

Метод Гаусса с выбором главного элемента по столбцу эквивалентен обычному методу Гаусса, примененному к системе, полученной из исходной системы перестановкой уравнений

РАХ = Рf. (16)

 

Справедливо разложение [19]

 

РА = LU, (17)

 

где L – нижняя треугольная матрица с отличными от нуля диагональными элементами и U – верхняя треугольная матрица с единичной главной диагональю.

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

 

Пример 2. Описать алгоритм метода Гаусса с выбором главного элемента по столбцу на основе факторизации.

При описании алгоритма использовать объекты и методы классов «SquareMatrix», «Vector», «AugmentMatrix» и «SwapMatrix».

При реализации метода эффективнее использовать расширенную матрицу системы и проводить необходимые преобразования над ней. Приведем возможное описание класса «AugmentMatrix» (Расширенная матрица) на языке программирования С++.

 

/* Класс «AugmentMatrix»*/

class AugmentMatrix: public AbstractMatrix{

/* Массив элементов матрицы*/

double **elements;

/* Количество столбцов в матрице. Количество строк матрицы задавали ранее в родительском классе «AbstractMatrix» */

int СolCount;

public:

/* Конструктор класса – расширенная матрица, состоящая из квадратной матрицы и вектора */

AugmentMatrix(SquareMatrix A, Vector f);

/* Конструктор класса – расширенная матрица, состоящая из двух квадратных матриц */

AugmentMatrix(SquareMatrix A, SquareMatrix B);

/* Получение элемента по индексу*/

double getElement(int i, int j);

/* Установка значения элемента */

void setElement(int i, int j, double element);

/* Получение количества строк в матрице */

int getColCount();

/* Получение количества столбцов в матрице */

int getRowCount();

/*Умножение квадратной матрицы и расширенной*/

AugmentMatrix operator *(SquareMatrix A, AugmentMatrix B);

/*Умножение матрицы перестановок и расширенной */

AugmentMatrix operator *(SwapMatrix A, AugmentMatrix B);

};

 

В методе Гаусса с выбором главного элемента будем применять расширенную матрицу, состоящую из квадратной матрицы и вектора. Приведем пример данного конструктора класса «AugmentMatrix» на языке программирования С++.

 

/* Конструктор – расширенная матрица, состоящая из квадратной матрицы и вектора*/

AugmentMatrix:: AugmentMatrix(SquareMatrix A, Vector f){

/* Задание размеров матрицы (количество строк и столбцов матрицы)*/

this->СolCount = A.getColCount() + 1;

this->size = A.getRowCount();

/* Создание матрицы*/

this->elements = new double*[this->size];

for (int i=0; i < this->size; i++){

this->elements[i]=new double[this->СolCount];

}

/* Заполнение матрицы*/

for (int i=0; i < this->size; i++){

for (int j=0; j < this->СolCount; j++)

if (j < this->СolCount - 1){

this->elements[i][j] = A.getElement(i, j);

} else{

this->elements[i][j] = f.getElement(i);

}

}

}

 

Основная операция рассматриваемого метода – это перемножение матриц. Реализация данной операции на языке С++ имеет вид

/*Умножение квадратной и расширенной матрицы*/

AugmentMatrix operator *(SquareMatrix A, AugmentMatrix B) {

AugmentMatrix C(B.getRowCount(), B.getColCount());

for (int i = 0; i < A.getRowCount(); i++) {

for (int j = 0; j < B.getColCount(); j++) {

C.elements[i][j]=0;

for (int t = 0; t < B.getRowCount(); t++)

C.elements[i][j] += A.elements[i][t] * B.elements[t][j];

}

}

return C;}

 

Для перестановки строк матрицы используется класс «SwapMatrix» (Матрица перестановок). Матрица перестановок получается из единичной матрицы изменением порядка расположения строк. Следовательно, для экономии памяти необходимо хранить только позицию единиц в каждой строке. Опишем возможную структуру данного класса. Реализация на языке программирования С++ имеет вид

 

/*Матрица перестановок*/

class SwapMatrix: public EMatrix {

/* Используется для хранения позиции единицы в каждой строке*/

int *Indexes;

public:

/*Конструктор*/

SwapMatrix (int size);

/* Перестановка строк*/

void swapRows(int i1, int i2);

/* Перестановка столбцов*/

void swapCols(int j1, int j2);

/* Получение количества строк в матрице */

int getColCount();

/* Получение количества столбцов в матрице */

int getRowCount();

/* Установка значения элемента */

void setElement(int i, int j, double element);

/* Получение элемента по индексу */

double getElement(int i, int j);

};

/* Конструктор*/

SwapMatrix:: SwapMatrix(int size):EMatrix(size) {

/* Indexes[i] описывает положение единицы в строке i*/

this->Indexes = new int[size];

for (int i = 0; i < size; ++i)

this->Indexes[i] = i;

 

/* Для единичной матрицы, номер строки совпадает с положением единицы в ней, то есть

1 0 0 Indexes[0] = 0;

0 1 0 Indexes[1] = 1;

0 0 1 Indexes[2] = 2;

для перестановочной матрицы, индексы будут уже совпадать не везде, например если поменять строки 2 и 3

1 0 0 Indexes[0] = 0;

0 0 1 Indexes[1] = 2;

0 1 0 Indexes[2] = 1;

Таким методом не нужно хранить всю матрицу в памяти.

*/

}

 

/* Перестановка строк*/

void SwapMatrix::swapRows(int i1, int i2) {

int k = this->Indexes[i1];

this->Indexes[i1] = Indexes[i2];

this->Indexes[i2] = k;

return;

}

 

Все необходимые классы и методы реализованы, опишем алгоритм метода Гаусса с выбором главного элемента по столбцу на языке С++.

 

void DirectMethodsNF::gaussChooseElement(SquareMatrix A, Vector f){

/* Создание расширенной матрицы системы */

AugmentMatrix Au = AugmentMatrix(A, f);

/*цикл*/

for (int i = 0; i < Au.getRowCount()-1; ++i) {

 

/*Поиск значения и индекса максимального элемента в столбце. Данный метод реализован в классе «SquareMatrix».

Value – значение максимального элемента

Index – индекс максимального элемента*/

 

/*Создание матрицы перестановок*/

SwapMatrix P(Au.getRowCount());

/*Перестановка строк*/

P.swapRows(i,Index);

 

/*Умножение матрицы перестановок и расширенной матрицы. Данный метод описан в классе «AugmentMatrix»*/

Au = P*Au;

 

/* Создание квадратной матрицы L и инициализация ее единичной. Метод инициализации квадратной матрицы единичной описан в классе «SquareMatrix»*/

/*Формирование матрицы L*/

L.setElement(i, i, 1/Au.getElement(i,i));

for (int j = i+1; j < Au.getRowCount(); ++j) {

if (Au.getElement(i,i)!= 0)

L.setElement(j,i,-(Au.getElement(j,i)/Au.getElement(i,i)));

else

L.setElement(j, i, 0);

}

/*Умножение квадратной и расширенной матрицы. Данный метод описан в классе «AugmentMatrix»*/

Au = L*Au;

}

 

/*Создание вектора решений*/

Vector X(Au.getRowCount());

/* Вычисление вектора решений обратным ходом метода Гаусса.*/

}

 


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.026 сек.)