Министерство образования и науки Российской Федерации
ГОУ
ВПО «
Кафедра
«
ВЫПОЛНИЛИ студент группы ПС-204 Счастливцев Е.В. студент группы ПС-203 Люкшин Е.О. 24 марта 2012 г. ПРОВЕРИЛ д.т.н. Лапин А.П. 24 марта 2012 г.
Условие задачи.
Дана система линейных уравнений, найти её корни используя метода Гаусса.
Оглавление
1 Общие сведения 3
2 Функциональное назначение 4
3 Описание логической структуры 6
4 Используемые технические средства 13
5 Вызов и загрузка 13
6 Входные данные 13
7 Выходные данные 14
8 Контрольные примеры 14
9 Тескт программы 26
Общие сведения
Программа именуется «реализация метода Гаусса». Для нормального функционирования программы необходимо следующее программное обеспечение:
операционная система MS-Windows XP;
Пакет программ Microsoft Visual Studio 2010.
Программа написана на языке высокого уровня Си.
Функциональное назначение
Программа предназначена для решения системы линейных уравнений методом Гаусса.
Описание метода:
Пусть исходная система порядка n выглядит следующим образом:
Первое, что надо сделать – проверить коэффициенты на равенство нулю, по меньшей мере хотя бы один из коэффициентов должен быть отличен от нуля. Если они все равны нулю, то у системы нет решений Предположим, что 1 из коэффициентов отличен от нуля, но первый коэффициент ( равен нулю, тогда нужно делать перестановку уравнений, пока не будет отличен от нуля.
Затем вводим множитель = , умножаем первое уравнение системы на и вычитаем из второго уравнения, тогда получим новое второе уравнение:
; где j=1, …, n – номер столбца.
Потом тоже самое проделываем с другими строками:
; где i=3,…,n – номер уравнения из которого исключается неизвестное; j=1,…,n – номер столбца.
В результате получаем новую систему:
Новая система полностью эквивалентна старой системе, за исключением того что во всех строках системы, кроме первой, отсутствует , то есть мы имеем n-1 уравнение с n-1 неизвестным.
Затем проделываем те же самые действия с новой системой порядка n-1:
Проверяем коэффициенты , где k<n – номер вычитаемой строки, на равенство нулю. Если они все равны нулю, то у системы нет решений. Если коэффициент не равен нулю, то оставляем все как есть, если же он равен нулю, но хотя бы 1 коэффициент отличен от нуля, тогда нужно делать перестановку уравнений, пока не будет отличен от нуля.
Затем вводим множители , где i=k+1,…,n, k-е уравнение системы на этот множитель и вычитаем из i-го уравнения, тогда элементы этого уравнения буду находиться по формулам:
где i=k+1,…,n – номер уравнения, которое вычитается из остальных, j=k,…,n – номер столбца.
В результате получим систему вида:
Процедура приведения системы к треугольному виду называется прямым ходом.
Затем мы проверяем коэффициент и элемент на равенство нулю, если они оба равны нулю, то у системы бесконечно много решений, если , то у системы нет решений, если отличен от нуля, то у системы единственное решение, и в этом случае корни вычисляются следующим образом:
; , и так далее.
Процедура нахождения корней называется обратным ходом.
Функциональные ограничения:
Порядок системы n должен быть целым положительным числом;
Описание логической структуры
Описание логической структуры программы представлено схемой алгоритма.
Схема алгоритма функции main().
Схема алгоритма функции vvodstr(a[100], k).
Схема алгоритма функции preobr(a[100], n).
3.1 Руководство пользователя
После запуска программы на выполнение на экране появится сообщение:
«Введите порядок системы: n=», - Пользователю необходимо ввести значение n на клавиатуре и завершить ввод клавишей <Enter> (Рисунок 1).
Рисунок 1
После этого на экране появится сообщение: «Введите коэффициент a11 системы: », - Пользователю необходимо ввести нужно значение на клавиатуре и завершить ввод клавишей <Enter>. Аналогично Пользователь должен ввести остальные элементы системы (Рисунок 2).
Рисунок 2
Затем на экране появится введенная Пользователем система и сообщение: «Нажмите Y, если хотите редактировать систему, или N, чтобы продолжить», - Пользователю необходимо нажать клавишу <Y>, чтобы редактировать систему, или клавишу <N>, чтобы продолжить .
Если Пользователь нажал клавишу <Y>, то на экране появится сообщение:
«Введите номер уравнения, в котором хотите редактировать элемент (i>0, i<n+1): i=», - Пользователю необходимо ввести номер уравнения (положительно число, не больше порядка матрицы) на клавиатуре и завершить ввод нажатием клавиши <Enter>.
Затем на экране появится сообщение: «Введите номер этого элемента в уравнении (j>0, j<n+2): j=», - Пользователь должен ввести номер элемента, который он хочет редактировать, в уравнении (положительно число, не больше числа n+1) на клавиатуре и завершить ввод нажатием клавиши <Enter>. Если номера введены корректно, то Пользователю будет предложено ввести новое значение редактируемого элемента (Рисунок 3). Затем снова будет предложено нажать клавишу <Y>, чтобы редактировать систему, или клавишу <N>, чтобы продолжить.
Рисунок 3
Если Пользователь нажал клавишу <N>, то на экране появится сообщение: «Нажмите на любую клавишу для вычисления корней», - Пользователю необходимо нажать на любую клавишу на клавиатуре для начала процедуры вычисления корней. Затем, если у системы есть решения, программа будет приводить матрицу системы к треугольному виду, и потом на экране появится ответ (Рисунок 4).
После этого Пользователю будет предложено сделать выбор: закрыть программу (нажав на клавишу <Esc>) или запустить заново (нажав любую другую клавишу).
Рисунок 4
3.2 Руководство программиста
В программе использованы следующие процедуры и функции:
А) vyvod() – функция для вывода системы уравнений.
Входные данные:
Целочисленная переменная n (тип int) – порядок системы;
матрица действительных элементов system[ ][ ] (тип double) – расширенная матрица системы.
Выходные данные: отсутствуют.
Вызывается из main() и из vychislenie().
Б) vychislenie() – функция для вычисления корней системы методом Гаусса.
Входные данные:
Целочисленная переменная n (тип int) – порядок системы;
массив действительных элементов x[] (тип double) – содержит корни системы;
матрица действительных элементов system[ ][ ] (тип double) – расширенная матрица системы.
Выходные данные: отсутствуют.
Вызывается из main().
Используемые технические средства
Для создания программы использовался компьютер на платформе ЭВМ IBM PC, с процессором Intel Pentium 4, тактовой частотой 3,06Ггц, оперативной памятью 512Мб, под управлением операционной системы Windows XP.
Вызов и загрузка
Для загрузки данной программой необходимо запустить файл «Гаусса.cpp» из среды Microsoft Visual Studio. На экране появится текст программы. Для запуска программы на исполнение пользователю необходимо нажать комбинацию клавиш Ctrl+F5. Вызов программы производится с жесткого диска. Объем программы составляет 28,5 Кбайт.
Входные данные
Входными данными являются:
Целая переменная n (тип int) – порядок системы;
матрица действительных элементов system[ ][ ] (тип double) – матрица системы.
Выходные данные
Матрица действительных элементов system[ ][ ] (тип double) – матрица системы;
массив действительных элементов x[ ] (тип double) – корни системы.
Контрольные примеры
Пример 1:
Проведём следующие действия:
Из строки № 2 вычтем строку № 1 (Строка 2 - строка 1);
из строки № 3 вычтем строку № 1 умноженную на 2 (Строка 3 - 2 × строка 1);
из строки № 4 вычтем строку № 1 (Строка 4 - строка 1).
Получим:
Проведём следующие действия:
К строке № 3 прибавим строку № 2 (Строка 3 + строка 2);
строку № 4 поделим на 3 (Строка 4 = строка 4 / 3).
Получим:
Проведём следующие действия:
Строку № 4 поставим на место строки № 2;
строку № 3 поставим на место строки № 4;
строку № 2 поставим на место строки № 3.
Получим:
Проведём следующие действия:
К строке № 3 прибавим строку № 2 умноженную на 6 (Строка 3 + 6 × строка 2).
Получим:
Теперь начинаем вычисление корней:
; ; ;
=1-2+1-2=-2.
Получаем ответ:
Результат выполнения программы:
Пример 2:
Проведём следующие действия:
К строке №2 прибавим строку №1, умноженную на -2 (Строка 2 + (-2) × строка 1);
к строке №3 прибавим строку №1, умноженную на -4 (Строка 3 + (-4) × строка 1);
к строке №4 прибавим строку №1, умноженную на -5 (Строка 3 + (-4) × строка 1).
Получим:
Проведём следующие действия:
К строке №3 прибавим строку №2, умноженную на -1 (Строка 3 + (-1) × строка 2).
Получим:
В третьей строке все элементы равны нулю, а элемент не равен нулю, значит система не имеет решений.
Ответ: решений нет.
Результат выполнения программы:
Пример 3:
Проведём следующие действия:
К строке №2 прибавим строку №1, умноженную на -2 (Строка 2 + (-2) × строка 1);
к строке №3 прибавим строку №1, умноженную на -4 (Строка 3 + (-4) × строка 1);
к строке №4 прибавим строку №1, умноженную на -5 (Строка 3 + (-4) × строка 1).
Получим:
Проведём следующие действия:
К строке №3 прибавим строку №2, умноженную на -1 (Строка 3 + (-1) × строка 2).
Получим:
В третьей строке все элементы равны нулю, значит система имеет бесконечно много решений.
Результат выполнения программы:
Пример 4:
Проведём следующие действия:
Поменяем местами строку № 1 и строку № 4.
Получим:
Проведём следующие действия:
Из строки № 2 вычтем строку № 1 умноженную на 2 (Строка 2 - 2 ×
строка 1);
из строки № 3 вычтем строку № 1 умноженную на 2 (Строка 3 - 2 ×
строка 1);
из строки № 4 вычтем строку № 1 умноженную на 3 (Строка 4 - 3 ×
строка 1).
Получим:
Проведём следующие действия:
Строку № 3 умножим на -1 (Строка 3 = строка 3 * -1);
поменяем местами строку № 2 и строку № 3.
Получим:
Проведём следующие действия:
К строке № 3 прибавим строку № 2 умноженную на 3 (Строка 3 + 3 × строка 2);
к строке № 4 прибавим строку № 2 умноженную на 2 (Строка 4 + 2 × строка 2).
Получим:
Проведём следующие действия:
Строку № 4 поделим на -3 (Строка 4 = строка 4 / -3);
поменяем местами строку № 3 и строку № 4.
Получим:
Проведём следующие действия:
К строке № 4 прибавим строку № 3 умноженную на 7 (Строка 4 + 7 × строка 3).
Получим:
Теперь начинаем вычисление корней:
; ; ;
Получаем ответ:
Результат выполнения программы: