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

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

КУРСОВАЯ РАБОТА

по дисциплине «Программирование»

на тему: «Решение СЛАУ модифицированным методом Гаусса«

РЕФЕРАТ

Пояснительная записка к курсовой работе: 19 c., 6 рис., 3 раздела, 1 приложение, 7 источников.

Объект исследования — система линейных уравнений.

Цель работы — разработка программы, с помощью которой модифицированным методом Гаусса и с помощью расширенной матрицы решить систему линейных уравнений.

Метод исследования — изучение литературы, написание и отладка программ на компьютере.

Данную программу можно использовать для нахождения неизвестных системы линейных уравнений.

Разработана одна программа, которая демонстрирует нахождение неизвестных системы линейных уравнений.

Программу написано на языке С++ в среде Visual C++. Эта программа предназначена для разработки компьютерного учебного пособия по дисциплине «Программирование». МАТРИЦА, АЛГОРИТМ, ФУНКЦИИ, ПАРАМЕТРЫ, ТИПЫ, ОПЕРАТОРЫ, ЗАГОЛОВОЧНЫЕ ФАЙЛЫ, КРАМЕР, ПЕРЕМЕННАЯ, ДЕМОНСТРАЦИОННАЯ ПРОГРАММА.

СОДЕРЖАНИЕ

ВВЕДЕНИЕ

1. ПОСТАНОВКА ЗАДАЧИ И СФЕРА ЕЁ ИСПОЛЬЗОВАНИЯ

2. ТЕОРЕТИЧЕСКАЯ ЧАСТЬ

3. ИНСТРУКЦИЯ ПОЛЬЗОВАТЕЛЯ

ВЫВОДЫ

СПИСОК ЛИТЕРАТУРЫ

ПРИЛОЖЕНИЕ

ВВЕДЕНИЕ

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

Программирование — в обычном понимании, это процесс создания компьютерных программ. Программированием также называют настройку электронных устройств и программно-аппаратных комплексов (например, программирование цифровых АТС, программирование бытовых приборов конечным пользователем, запись информации в ПЗУ). Разработку логической схемы для ПЛИС тоже называют программированием. В общем понимании, программирование — это процесс описания функционирования устройства, который может быть выражен либо в структуре самого устройства, либо в виде набора инструкций. Программирование сочетает в себе элементы науки (логика, математика, информатика, кибернетика), инженерной дисциплины, и искусства (авторской творческой деятельности).

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

В более широком смысле под программированием понимают весь спектр активностей, связанных с созданием и поддержанием в рабочем состоянии программ (программного обеспечения ЭВМ). Более точный и современный термин — программная инженерия, или инженерия ПО. Сюда входят анализ и постановка задачи, проектирование программы, построение алгоритмов, разработка структур данных, написание текстов программ, отладка и тестирование программ (испытания программ), документирование, настройка (конфигурирование), доработка и сопровождение.

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

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

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

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

1. ПОСТАНОВКА ЗАДАЧИ И СФЕРА ЕЁ ИСПОЛЬЗОВАНИЯ

Целью данной задачи является решение системы линейных уравнений, т. е. нахождение её неизвестных х1, х2, х3 модифицированным методом Гаусса и с помощью расширенной матрицы.

Начальными данными являются коэффициенты при неизвестных х1, х2, х3 и свободные члены. Свободные члены и коэффициенты при неизвестных являются главными данными, которые программа записывает в свою память.

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

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

2. ТЕОРЕТИЧЕСКАЯ ЧАСТЬ

Блок-схемы алгоритма метода Гаусса:

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

Рис. 2 Алгоритм запоминания коэффициентов

Рис. 3 Алгоритм прямого хода

Рис. 4 Алгоритм выбора рабочей строки

Рис. 5 Алгоритм обратного хода

Рис. 6 Алгоритм расчета невязок

3. ИНСТРУКЦИЯ ПОЛЬЗОВАТЕЛЯ

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

Минимальные системные требования для работы программы:

— OS MS-DOS или Windows

— 5 МБ на жестком диске

— 8 МБ оперативной памяти

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

— Gauss. exe (разработанная программа)

— Gauss. cpp (текст программы)

— Курсовой. doc (пояснительная записка)

-Для запуска программы Gauss необходимо запустить находящуюся на дискете программу Gauss. exe.

ВЫВОДЫ

гаусс матрица алгебраический уравнение

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

Ниже приведен результат работы программы

СПИСОК ЛИТЕРАТУРЫ

1. Апатёнок Р. Ф. Элементы линейной алгебры и аналитической геометрии. — Минск: Вышэйшая школа, 1977 г. — 257 с.

2. Глушаков С. В. и др. Язык программирования С++. -Харьков: Фолио, 2010. — 500 с.

3. ГОСТ 19. 701−90. ЕСПД. Схемы алгоритмов, программ, данных и систем. Условные обозначения и правила выполнения.- М.: 1991.

4. Дейтел Х. М. Дейтел П. Дж. Как программировать на С++: Пер. с англ. — М.: ЗАО «Издательство БИНОМ», 2009 г. — 1024 с.: ил.

5. Страуструп Б. Язык программирования С++. Часть 1. — Киев: «ДиаСофт», 1993. — 264 с.

6. Страуструп Б. Язык программирования С++. Часть 2. — Киев: «ДиаСофт», 1993. — 296 с.

7. Холзнер С. VISUAL C++6: учебный курс — СПб: Издательство «Питер», 2010. -576 с.

ПРИЛОЖЕНИЕ

Текст программы

#include «stdio. h»

#include «stdafx. h»

#include «conio. h»

#include «clocale»

#include «cmath»

#include «iostream»

#define N 50

using namespace std;

void glavelem (int k, long double mas[] [N + 1], int n, int otv[]);

int main (void)

{

setlocale (LC_ALL, «Russian»);

FILE *outfile;

long double mas[N] [N + 1];

long double x[N]; //Корни системы

int otv[N]; //Отвечает за порядок корней

int i, j, k, n = 4;

for (i = 0; i < n; i++)

{

for (j = 0; j < n + 1; j++)

{

fscanf (outfile,"%lf", & mas[i] [j]);

}

}

//Вывод введенной системы

printf («Расширенная матрица системы: n»);

for (i = 0; i < n; i++)

{

for (j = 0; j < n + 1; j++)

printf («%lf «, mas[i] [j]);

printf («n»);

}

printf («n»);

//Сначала все корни по порядку

for (i = 0; i < n + 1; i++)

otv[i] = i;

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

for (k = 0; k < n; k++)

{

//Выбор главного элемента

// Рабочей выбирается та строка, в которой находится наибольший по модулю коэффициент k-го столбца, расположенный на

//главной диагонали и под ней

glavelem (k, mas, n, otv);

//Вычисление новых значений коэффициентов

//Вычитаем получавшуюся после перестановки первую строку из остальных строк, домножив её на величину,

//равную отношению первого элемента каждой из этих строк к первому элементу первой строки, обнуляя тем

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

//столбец мысленно вычёркиваем и продолжают пока не останется матрица нулевого размера.

for (j = n; j >= k; j--)

mas[k] [j] /= mas[k] [k];

for (i = k + 1; i < n; i++)

for (j = n; j >= k; j--)

mas[i] [j] -= mas[k] [j] * mas[i] [k];

//Как только k=n прямой ход завершается и мы получаем треугольную матрицу A

}

//Обратный ход, вычисление значений неизвестных начиная с последнего уравнения

for (i = 0; i < n; i++)

x[i] = mas[i] [n];

for (i = n — 2; i >= 0; i--)

for (j = i + 1; j < n; j++)

x[i] -= x[j] * mas[i] [j];

//Вывод результата

printf («Корни СЛАУ в порядке: x1, x2, x3, x4: n»);

for (i = 0; i < n; i++)

for (j = 0; j < n; j++)

if (i == otv[j])

{

//Расставляем корни по порядку

printf («%fn», x[j]);

break;

}

getch ();

return (0);

}

void glavelem (int k, long double mas[] [N + 1], int n, int otv[])

{

int i, j, i_max = k, j_max = k;

long double temp;

//Ищем максимальный по модулю элемент

for (i = k; i < n; i++)

for (j = k; j < n; j++)

if (fabs (mas[i_max] [j_max]) < fabs (mas[i] [j]))

{

i_max = i;

j_max = j;

}

//Переставляем строки, перемещая максимальный по модулю элемент в крайнее верхнее положение

for (j = k; j < n + 1; j++)

{

temp = mas[k] [j];

mas[k] [j] = mas[i_max] [j];

mas[i_max] [j] = temp;

}

getch ();

}

ПоказатьСвернуть
Заполнить форму текущей работой