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

Метод Гаусса решения СЛАУ

Автор работы: Пользователь скрыл имя, 21 Марта 2013 в 14:01, курсовая работа

Описание работы

Матрицы возникающих систем могут иметь различные структуры и свойства. Уже сейчас имеется потребность в решении систем линейных алгебраических уравнений с матрицами полного заполнения порядка нескольких тысяч. При решении ряда прикладных задач методом конечных элементов в ряде случаев появляются системы, обладающие симметричными положительно определёнными ленточными матрицами порядка несколько десятков тысяч с половиной ширины ленты до тысячи. И, наконец, при использовании в ряде задач метода конечных разностей необходимо решить системы разностных уравнений с разрежёнными матрицами порядка миллион. Одним из самых распространенных методов решения систем линейных алгебраических уравнений является метод Гаусса.

Содержание работы

ВВЕДЕНИЕ
1. ПОСТАНОВКА ЗАДАЧИ
2. МАТЕМАТИЧЕСКИЕ И АЛГОРИТМИЧЕСКИЕ ОСНОВЫ РЕШЕНИЯ ЗАДАЧИ
2.1 ОПИСАНИЕ МЕТОДА
2.2 АЛГОРИТМ
3. ФУНКЦИОНАЛЬНЫЕ МОДЕЛИ И БЛОК-СХЕМЫ РЕШЕНИЯ ЗАДАЧИ
4. ПРОГРАММНАЯ РЕАЛИЗАЦИЯ РЕШЕНИЯ ЗАДАЧИ
5. ПРИМЕР ВЫПОЛНЕНИЯ ПРОГРАММЫ
ЗАКЛЮЧЕНИЕ
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ И ЛИТЕРАТУРЫ

Курсовая работа: Поиск решений системы линейных уравнений методом Гаусса

ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ

Государственное образовательное учреждение

Высшего профессионального образования

«Нижегородский государственный университет им. Н.И. Лобачевского»

Кафедра «Экономическая информатика»

по дисциплине: “Информатика и

Поиск решений системы линейных уравнений методом Гаусса

(Программистским и математическим вариантом)

Выполнил(ла) студент(ка)II курса

725-2 группы, очного отделения

2. Постановка задачи

3. Алгоритм решения.

4. Исходный текст программы на С++.

5. Тестирование программы

Введение в объектно-ориентированное программирование.

Объектно-ориентированное программирование представляет собой чуть более автоматизированный способ программирования. Объектно-ориентированные программы – это не просто процедурные программы, переведенные на новый синтаксис. Они должны строится на новой философии разработки. Для них требуется новая стратегия программирования, которую часто бывает трудно освоить .

Основная идея ООП: программа состоит из группы объектов, часто связанных между собой. В С++ объекты описываются при помощи нового типа данных class. Класс включает в себя набор переменных (данных) и операций (методов или функций-членов), которые действуют на эти переменные. Полученными объектами можно управлять при помощи сообщений. В ООП объекты включают в себя не только данные (данные-члены), но и методы (функции-члены) воздействия на эти данные. Эти две части в сочетании образуют функциональную единицу программы. Другими словами, объекты содержат данные и методы работы с этими данными. Ниже приведены три основных преимущества объектно-ориентированных программ по сравнению с эквивалентными программами, разработанными сверху вниз.

Сопровождение программы. Программы проще читать и понимать, ООП позволяет управлять сложностью программы, оставляя видимыми программисту только существенные детали.

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

ООП полностью принадлежит к миру С++, поскольку в С нет основного ядра – абстрактного типа данных class Поэтому переписать процедурно-ориентированную программу как объектно-ориентированную гораздо сложнее, чем просто подставить вместо одного ключевого слова другое.

ООП представляет собой технику программирования, которая позволяет рассматривать основные идеи как множество объектов. Используя объекты, можно представить задачи, которые необходимо выполнить, их взаимодействие и любые заданные условия, которые должны быть соблюдены. Структура данных часто образует основы объектов; таким образом в С или С++ тип struct может образовывать элементарный объект. Связь с объектом можно организовать при помощи сообщений. Использование сообщений похоже на вызов функций в процедурно-ориентированной программе. Когда объект получает сообщение,вступают в действие методы, содержащиеся в объекте. Методы (их иногда называют фунциями-членами) аналогичны функциям процедурно-ориентированного программирования. Тем не менее метод является частью объекта, а не чем-то отдельным, как было бы в процедурном аналоге.

Основные термины и положения ООП.

Этот термин включает в себя логическое связывание данных с конкретной операцией. Она так же означает, что они являются не -глобальными доступными всей программе, а локальными – доступными только малой ее части. Инкапсуляция также автоматически подразумевает защиту данных. Именно для этого предназначена структура class в С++. В классе управление функциональными деталями объекта осуществляется при помощи спецификаторов private, public, protected.

В общем случае можно представить себе иерархию классов как родословную в генеалогическом древе, где класс С++ представляет собой шаблон для создания классов-потомков. Объекты, полученные из описания класса, называют экземплярами этого класса. Можно создать иерархию классов с классом-родителем и несколькими классами-потомками. Основой для этого являются производные классы.

Наследование в ООП позволяет классу получать свойства другого класса объектов. Родительский класс служит шаблоном для производного класса; этот шаблон можно менять различными способами. Наследование является важным положением, поскольку оно позволяет повторно использовать определение класса без значительных изменений в коде.

Строится на описанной выше концепции наследования. Программа посылает одно и тоже сообщение как объекту родительского класса, так и всем объектам производных классов. И родительский класс, и классы-потомки ответят на сообщение соответствующим образом. Полиморфизм дает возможность дополнять уже существующие части программы.

Виртуальные функции определяются в родительском классе, а в производных классах происходит доопределение этих функций и для них создаются новые реализации. При работе с виртуальными функциями сообщения передаются как указатели, которые указывают на объект вместо прямой передачи объекту. Виртуальные функции используют таблицу для адресной информации. Эта таблица инициализируется во время выполнения при помощи конструктора. Конструктор вызывается каждый раз, когда создается объект его класса. Задача конструктора в данном случае состоит в связывании виртуальной функции с таблицей адресной информации. Во время компиляции адрес виртуальной функции неизвестен; вместо этого ей отводится позиция в таблице адресов.

С++ -язык предметно-ориентированного программирования. Язык С++ поддерживает процедурную и объектно-ориентированную парадигмы программирования.

Объектно-ориентированное программирование – это новый способ подхода к программированию. Такое программирование, взяв лучшие черты структурного программирования, дополняет его новыми идеями, которые переводят в новое качество подход к созданию программ.

Наиболее важное понятие языков объектно-ориентированного программирования – это понятие объекта (object). Объект – это логическая единица, которая содержит данные и правила (методы) обработки этих данных. В языке С++ в качестве таких правил обработки выступают функции, т. е. объект в Borland C++ объединяет в себе данные и функции, обрабатывающие эти данные. Одним из самых главных понятий языка С++ является понятие класса. В языке С++ для того, чтобы определить объект, надо сначала определить его форму с помощью ключевого слова Ближайшей аналогией класса является структура. Память выделяется объекту только тогда, когда класс используется для его создания. Любой объект языка С++ имеет одинаковые атрибуты и функциональность с другими объектами того же класса. За создание своих классов и поведение объектов этих классов полную ответственность несет сам программист. Работая в некоторой среде, программист получает доступ к обширным библиотекам стандартных классов. Обычно, объект находится в некотором уникальном состоянии, определяемом текущими значениями его атрибутов. Функциональность объектного класса определяется возможными операциями над экземпляром этого класса.

Метод Гаусса для решения СЛАУ.

Метод Гаусса. (Карл Фридрих Гаусс (1777-1855) немецкий математик) В отличие от матричного метода и метода Крамера, метод Гаусса может быть применен к системам линейных уравнений с произвольным числом уравнений и неизвестных.Метод Гаусса — один из основных результатов линейной алгебры и аналитической геометрии, к нему сводятся множество других теорем и методов линейной алгебры (теория и вычисление определителей, решение систем линейных уравнений, вычисление ранга матрицы и обратной матрицы, теория базисов конечномерных векторных пространств и т.д.).

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

— метод обращения матрицы;

Матрица A с элементами aij называется ступенчатой, если она обладает следующими двумя свойствами:

1. если в матрице есть нулевая строка, то все строки ниже нее также нулевые;

2. пусть aij не равное 0 — первый ненулевой элемент в строке с индексом i, т.е. элементы ail = 0 при l i и l = i, прибавляем i-ю строку, умноженную на коэффициент r = -akj /aij :

Такая схема работает нормально только тогда, когда коэффициент r по абсолютной величине не превосходит единицы. В противном случае, ошибки округления умножаются на большой коэффициент и, таким образом, экспоненциально растут. Математики называют это явление неустойчивостью вычислительной схемы. Если вычислительная схема неустойчива, то полученные с ее помощью результаты не имеют никакого отношения к исходной задаче. В нашем случае схема устойчива, когда коэффициент r = -akj /aij не превосходит по модулю единицы. Для этого должно выполняться неравенство Отсюда следует, что при поиске разрешающего элемента в j-м столбце необходимо найти не первый попавшийся ненулевой элемент, а максимальный по абсолютной величине . Если он по модулю не превосходит ε, то считаем, что все элементы столбца нулевые; иначе меняем местами строки, ставя его на вершину столбца, и затем обнуляем столбец элементарными преобразованиями второго рода.

Основная идея метода Гаусса- привести матрицу систему к диагональному виду, то есть все элементы главной диагонали –нули. Для приведения матрицы к такому виду, мы выбираем самую верхнюю строку матрицы, и вычитаем её из всех остальных строк, умножив её для каждой строки на некий коэффициент, так, что самый левый столбец ниже главной диагонали заполнен нулями. Вычитаемая с коэффициентом строка называется текущей строкой. Выбирая текущую строку вначале верхнюю, а потом всё ниже и ниже, мы добьёмся, что все элементы ниже главной диагонали будет равны нулю. Эту часть метода- обработка строк по текущей строке и предстоит распараллеливать.

Суть метода заключается в последовательном исключении неизвестных. Рассмотрим систему линейных уравнений:

Разделим обе части 1–го уравнения на a11  0, затем: 1) умножим на а21 и вычтем из второго уравнения 2) умножим на а31 и вычтем из третьего уравнения и т.д. Получим:, где d 1 j = a 1 j / a 11 , j = 2, 3, …, n +1. dij = aij ai 1 d 1 j i = 2, 3, … , n ; j = 2, 3, … , n +1. Далее повторяем эти же действия для второго уравнения системы, потом – для третьего и т.д.

Пример. Решить систему линейных уравнений методом Гаусса.

Составим расширенную матрицу системы.

Таким образом, исходная система может быть представлена в виде:

,

Пример. Решить систему методом Гаусса.

Составим расширенную матрицу системы.

Таким образом, исходная система может быть представлена в виде:

,

откуда получаем: z = 3; y = 2;x =1.

Работа с файлами.

Стандартная библиотека С++ содержит набор функций для работы с файлами. Эти функции описаны в стандарте ANSI. Отметим, что файловый ввод-вывод не является частью языка С+, и ANSI-функции — не единственное средство ввода-вывода. Так, в операционной системе Unix более популярен другой набор функций ввода-вывода, который можно использовать не только для работы с файлами, но и для обмена по сети. В C++ часто используются библиотеки классов для ввода-вывода. Тем не менее, функции ANSI-библиотеки поддерживаются всеми С++-компиляторами, и потому программы, применяющие их, легко переносятся с одной платформы на другую. Прототипы функций ввода-вывода и используемые для этого типы данных описаны в стандартном заголовочном файле «stdio.h.

Открытие файла: функция fopen.

Для доступа к файлу применяется тип данных FILE. Это структурный тип, имя которого задано с помощью оператора typedef в стандартном заголовочном файле «stdio.h». Программисту не нужно знать, как устроена структура типа файл: ее устройство может быть системно зависимым, поэтому в целях переносимости программ обращаться явно к полям структуры FILE запрещено. Тип данных «указатель на структуру FILE используется в программах как черный ящик: функция открытия файла возвращает этот указатель в случае успеха, и в дальнейшем все файловые функции применяют его для доступа к файлу.

Здесь path — путь к файлу (например, имя файла или абсолютный путь к файлу), mode — режим открытия файла. Строка mode может содержать несколько букв. Буква «r» (от слова read) означает, что файл открывается для чтения (файл должен существовать). Буква «w» (от слова write) означает запись в файл, при этом старое содержимое файла теряется, а в случае отсутствия файла он создается. Буква «a» (от слова append) означает запись в конец существующего файла или создание нового файла, если файл не существует.

В некоторых операционных системах имеются различия в работе с текстовыми и бинарными файлами (к таким системам относятся MS DOS и MS Windows; в системе Unix различий между текстовыми и бинарными файлами нет). В таких системах при открытии бинарного файла к строке mode следует добавлять букву «b» (от слова binary), а при открытии текстового файла — букву «t» (от слова text). Кроме того, при открытии можно разрешить выполнять как операции чтения, так и записи; для этого используется символ + (плюс). Порядок букв в строке mode следующий: сначала идет одна из букв «r», «w», «a», затем в произвольном порядке могут идти символы «b», «t», «+». Буквы «b» и «t» можно использовать, даже если в операционной системе нет различий между бинарными и текстовыми файлами, в этом случае они просто игнорируются.

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

Составить программу решения систем линейных алгебраических уравнений с матрицей порядка n методом Гаусса с использованием языка С++ .

Алгоритм решения системы линейных уравнений с помощью метода Гаусса. Алгоритм реализован на языке С++.

Пусть у нас есть система N линейных уравнений

где xi — неизвестные, aij — коэффициенты при неизвестных, bi — свободные члены в уравнениях, i,j пробегают значения от 1 до N.

Цель задачи — зная aij и bi найти xi .

Суть метода Гаусса состоит в том, что с помощью некоторых операций исходную систему уравнений можно свести к более простой системе. Эта простая система имеет треугольный вид:

Название: Поиск решений системы линейных уравнений методом Гаусса
Раздел: Рефераты по информатике, программированию
Тип: курсовая работа Добавлен 15:09:58 25 апреля 2009 Похожие работы
Просмотров: 4363 Комментариев: 21 Оценило: 5 человек Средний балл: 4.4 Оценка: неизвестно Скачать
a11 x1 +a12 x2 +a13 x3 +.a1N xN = b1
a22 x2 +a23 x3 +.a2N xN = b2
a33 x3 +.a3N xN = b3
.
.aNN xN = bN

Особенность этой системы — в строках с номером i все коэффициенты aij при j 0 то:

1.Принимаем сообщение с текущей строкой

2.ЦИКЛ обработки строк

1.Принимаем сообщение со строкой для обработки .

(получаем ещё номер строки в матрице).

2.Обрабатываем полученную строку

3.Посылаем главному процессу результаты работы. Для каждой строки посылаем строку и номер строки.

4.Идём на новый шаг цикла обработки строк.

4.Исходный текст программы

Составить программу решения систем линейных алгебраических уравнений с квадратной невырожденной матрицей порядка n методом Гаусса с использованием языка С++ .

// Решение системы линейных уравнений методом Гаусса.

using namespace std;

#include // Описания математических функций

#include // Описанияфункций malloc и free

printf(«CAN’T OPEN FILE\nPlease, f**k off!»);

Курсовая работа на тему: Решение систем линейных уравнений. Метод Гаусса

ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕСИОНАЛЬНОГО ОБРАЗОВАНИЯ

«РОССИЙСКИЙ ГОСУДАРСТВЕННЫЙ ПЕДАГОГИЧЕСКИЙ УНИВЕРСИТЕТ им А. И.ГЕРЦЕНА»

Кафедра информационных и коммуникационных технологий

«Решение систем линейных уравнений. Метод Гаусса. Алгоритм оптимального исключения неизвестных по столбцам с выбором главных элементов по строкам преобразовав матрицу А в эквивалентную верхнюю левую треугольную матрицу»

студентка 2 курса 1 гр

кандидат педагогических наук, доцент

Введение Постановка задачи

1) вывод рекуррентной формулы

3) код программы

4) контрольный пример

Введение

Решение систем линейных алгебраических уравнений – одна из основных задач вычислительной линейной алгебры. Хотя задача решения системы линейных уравнений сравнительно редко представляет самостоятельный интерес для приложений, от умения эффективно решать такие системы часто зависит сама возможность математического моделирования самых разнообразных процессов с применением ЭВМ. Значительная часть численных методов решения различных (в особенности – нелинейных) задач включает в себя решение систем линейных уравнений как элементарный шаг соответствующего алгоритма.

Одна из трудностей практического решения систем большой размерности связанна с ограниченностью оперативной памяти ЭВМ. Хотя объем оперативной памяти вновь создаваемых вычислительных машин растет очень быстро, тем не менее, еще быстрее возрастают потребности практики в решении задач все большей размерности. В значительной степени ограничения на размерность решаемых систем можно снять, если использовать для хранения матрицы внешние запоминающие устройства. Однако в этом случае многократно возрастают как затраты машинного времени, так и сложность соответствующих алгоритмов. Поэтому при создании вычислительных алгоритмов линейной алгебры большое внимание уделяют способам компактного размещения элементов матриц в памяти ЭВМ.

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

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

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

Значимость задачи породила целый ряд методов ее решения. Среди этих методов есть универсальные и специализированные (т. е. применимые лишь к системам, имеющим некоторые специальные свойства). Методы отличаются друг от друга эффективностью, требованиями к объемам машинной памяти (при реализации на ЭВМ), закономерностями накопления ошибок в ходе расчетов. Не существует одного метода, который можно было бы во всех случаях предпочесть всем остальным, и поэтому знакомство с несколькими методами является обязательным для квалифицированного вычислителя.

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

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

(1.1)

Запись матрицы в такой форме достаточно громоздка, и при первой возможности я буду впредь использовать матричную форму записи, совершенно равносильную (1.1):

А — матрица, X – вектор-столбец неизвестных, B- вектор-столбец свободных членов.

Методы решения систем вида (1.1) можно разделить на два класса. К первому относятся прямые методы. С помощью таких методов в принципе можно в результате конечного числа шагов получить точные значения неизвестных. При этом предполагается, что и коэффициенты в правой части, и элементы столбца свободных членов – числа точные, а все вычисления производятся без округлений. Однако практически такое может произойти и в исключительных случаях или может быть связано с решением специального класса задач (например, когда решениями являются только целые числа). К подобным методам относятся:

o Метод определителей (метод Крамера) хорошо известный из курса алгебры;

o Матричное решение: X=A-1B (если известна обратная матрица);

o Различные варианты метода исключения неизвестных (метода Гаусса).

Чаще всего прямые методы реализуются на ЭВМ, и в процессе вычислительной ошибки округления и погрешности арифметических действий неизбежны. В силу этого название «точный» не вполне соответствует существу дела (но является традиционным).

Практическое применение первых двух методов может оказаться неэффективным или вообще невозможным. Если попробовать решать «в лоб» систему 15 линейных уравнений с 15 неизвестными с помощью формулы Крамера, то придется вычислить 16 определителей порядка 15, что приведет к выполнению примерно 2*16*15!*14 умножений и сложений. Для выполнения этих вычислений на ЭВМ с быстродействием 106 арифметических операций в секунду потребуется почти 10 недель непрерывной работы. С практической точки зрения при достаточно больших размерах системы матричное решение также является малопривлекательным, поскольку задача нахождения обратной матрицы сама по себе не проще задачи решения системы.

Ко второму классу методов решения систем линейных алгебраических уравнений относятся различные итерационные методы. К ним относятся:

o Метод простой итерации;

o Метод Зейделя.

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

Итерационные методы применяют главным образом для решения задач большой размерности, когда использование прямых методов невозможно из-за ограничений в доступной оперативной памяти ЭВМ или из-за необходимости выполнения чрезмерно большого числа арифметических операций. Большие системы уравнений, возникающие в основном в приложениях, как правило, являются разреженными. Методы исключения для систем с разреженными матрицами неудобны, например, тем, что при их использовании большое число нулевых элементов превращается в ненулевые и матрица теряет свойство разреженности. В противоположность им при использовании итерационных методов в ходе итерационного процесса матрица не меняется, и она, естественно, остается разреженной. Большая эффективность итерационных методов по сравнению с прямыми методами тесно связанна с возможностью существенного использования разреженности матриц.

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

2. Постановка задачи:

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

2.1. Вывод рекуррентной формулы

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

В численном методе Гаусса решения систем линейных уравнений АХ=В преобразуем в эквивалентную треугольную систему.

Решение этой задачи сводится сводиться к двум этапам.

1 этап. Прямой ход.

Матрица А преобразуется в эквивалентную ей левую верхнюю треугольную матрицу, таким же преобразованиям подвергается и вектор-столбец свободных членов В, который обычно присоединяется к матрице А справа как n+1 столбец, но я присоединю его слева как 1 столбец для того, чтобы удобнее было вычислять неизвестные данной нам матрицы.

2 этап. Обратный ход.

На этом ходе находятся корни уравнений методом обратной подстановки.

Алгоритм действия на 1 этапе.

На этапе прямого хода мы должны получить левую верхнюю треугольную матрицу, диагональные элементы должны быть не единичными.

Для этого необходимо:

1. преобразование матрицы А начнем из верхнего правого угла, где расположен элемент а1n+1 и будем двигаться сверху вниз и справа налево

2. двигаясь сверху вниз под диагональю в каждом (n-i+1)-том столбце будем получать нули

3. двигаясь справа налево включая столбец свободных членов обеспечивает эквивалентное преобразование элементов начиная с (n+1) столбца.

Рассмотрим подробно вывод рекуррентных формул для первого этапа.

1.Для получения нуля на месте ведомого элемента ak(n-i+1) необходимо получить новый коэффициент преобразования для k-той строки. Он равен:

(2.1)

2.Далее в каждом цикле частичного обнуления (n-i+1)-го столбца из каждой ведомой k-той строки вычитается ведущая строка кратная коэффициенту преобразования , с точки зрения математики это описывается следующим образом:

(2.2)

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

Алгоритм действий на этапе обратного хода.

В результате преобразования имеем:

Обобщенные формулы для нахождения корней систем линейных уравнений имеет следующий вид:

(2.3)

(2.4)

Dim x(3), p, p5, S As Decimal

Dim i, k, n, j, i1, j1, t, m, m5, l, m1, max As Integer

Dim strSt As String

Console. WriteLine(«Метод оптимального исключения по столбцам «)

Console. WriteLine(«с выбором главного элемента по строкам»)

‘вывод матрицы на экран

Console. WriteLine(«Исходная матрица»)

For i = 0 To n — 1

strSt = FormatNumber(mas(i, j), 2)

Console. Write(» <0>«, strSt)

‘выбор главного элемента по строкам

For i = 0 To n — 1

max = Math. Abs(mas(i, n — i))

For j = n — i To 1 Step -1

m5 = Math. Abs(mas(i, j))

If m5 > max Then

If j1 = n — i Then

‘конец алгоритма выбора главного элемента

For l = 0 To n — 1

mas(l, n — i) = mas(l, j1)

Console. WriteLine(«Преобразованная матрица»)

For t = 0 To n — 1

strSt = FormatNumber(mas(t, j), 2)

Console. Write(» <0>«, strSt)

Console. WriteLine(«Преобразовываем матрицу в треугольную левую верхнюю»)

‘процедура прямого хода

‘преобразовываем матрицу в левую верхнюю треугольную

For i = 0 To n — 2

For k = i + 1 To n — 1

p = mas(k, n — i) / mas(i, n — i)

For j = n — i To 0 Step -1

mas(k, j) = mas(k, j) — p * mas(i, j)

‘вывод преобразованной матрицы

For t = 0 To n — 1

strSt = FormatNumber(mas(t, j), 2)

Console. Write(» <0>«, strSt)

‘вывод полученной матрицы

Console. WriteLine(«Полученная матрица»)

For i = 0 To n — 1

strSt = FormatNumber(mas(i, j), 2)

Console. Write(» <0>«, strSt)

‘процедура обратного кода

x(0) = mas(n — 1, 0) / mas(n — 1, 1)

For j = 0 To n — i — 2

S = S + mas(i, j + 1) * x(j)

x(n — i — 1) = (mas(i, 0) — S) / mas(i, n — i)

Loop While i >= 0

Console. WriteLine(«Полученные значения х»)

For i = 0 To n — 1

Console. Write(«x<0>=», i + 1)

strSt = FormatNumber(x(i), 2)

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

1. Получим новый коэффициент преобразования для каждой k-ой строки.

2. Для обнуления 5-го столбца из каждой ведомой k-той строки вычитается ведущая строка кратная коэффициенту преобразования .

3. Получим новый коэффициент преобразования для каждой k-ой строки.

4. Для обнуления 4-го столбца из каждой ведомой k-той строки вычитается ведущая строка кратная коэффициенту преобразования .

5. Получим новый коэффициент преобразования для каждой k-ой строки.

6. Для обнуления 3-го столбца из каждой ведомой k-той строки вычитается ведущая строка кратная коэффициенту преобразования .

7. Вычислим переменные х:

Сравним полученные результаты с результатом программы

Метод оптимального исключения по столбцам

с выбором главного элемента по строкам

17,00 5,00 2,00 4,00 6,00

13,00 4,00 3,00 1,00 5,00

22,00 6,00 5,00 3,00 8,00

20,00 3,00 10,00 5,00 2,00

17,00 4,00 2,00 5,00 6,00

13,00 1,00 3,00 4,00 5,00

22,00 3,00 5,00 6,00 8,00

20,00 5,00 10,00 3,00 2,00

Преобразовываем матрицу в треугольную левую верхнюю

17,00 4,00 2,00 5,00 6,00

-1,17 -2,33 1,33 -0,17 0,00

-0,67 -2,33 2,33 -0,67 0,00

14,33 3,67 9,33 1,33 0,00

17,00 4,00 2,00 5,00 6,00

-1,17 -2,33 1,33 -0,17 0,00

4,00 7,00 -3,00 0,00 0,00

5,00 -15,00 20,00 0,00 0,00

17,00 4,00 2,00 5,00 6,00

-1,17 -2,33 1,33 -0,17 0,00

4,00 7,00 -3,00 0,00 0,00

31,67 31,67 0,00 0,00 0,00

17,00 4,00 2,00 5,00 6,00

-1,17 -2,33 1,33 -0,17 0,00

4,00 7,00 -3,00 0,00 0,00

31,67 31,67 0,00 0,00 0,00

Полученные значения х

. Теория матриц (издание третье)./. Москва: „Наука”, главная редакция физико-математической литературы, 1967г. Математический энциклопедический словарь. Москва: „Советская энциклопедия”, 1988г. Интернет-ресурсы (*****) Выводила рекуррентные формулы студентка 2 курса института информационных технологий


источники:

http://www.bestreferat.ru/referat-141497.html

http://pandia.ru/text/78/002/10054.php