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

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 18.06.2012
Размер файла 305,0 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

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

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

НИЖЕГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

им. Р.Е.АЛЕКСЕЕВА

ИНСТИТУТ РАДИОЭЛЕКТРОНИКИ И ИНФОРМАЦИОННЫХ

ТЕХНОЛОГИЙ

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

«Решение систем линейных уравнений по методу Гаусса»

Выполнила

студентка группы С11-РЭС

Батюта М.Р

Проверил

доц. кафедры ИРС

Сидоров С.Б

Нижний Новгород 2012г.

1. Введение

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

Одним из способов преодоления сложности данной задачи является использование технологии разработки программ «сверху-вниз». Этот подход позволяет путем декомпозиции исходной задачи свести ее к последовательному решению более простых задач. Его использование позволяет уменьшить затраты на отладку и повысить надёжность программы. Также существенным моментом технологии «сверху-вниз» является её акцент на повторное использование уже существующих модулей, а не разработку их «с нуля».

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

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

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

В заключении делаются выводы о полноте решения поставленной задачи, а так же приводится ряд соображений по возможным направлениям доработки программы.

Так же приведена техническая информация, включающая листинги всех модулей программы.

алгебраический гаусс видеотека алгоритм

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

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

Пусть дана система:

Метод Гаусса состоит в последовательном исключении неизвестных из этой системы. Последовательно умножая первое уравнение на и складывая с i-м уравнение, исключим из всех уравнений кроме первого. Получим систему

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

Описанная процедура называется прямым ходом метода Гаусса. Заметим, что ее выполнение было возможно при условии, что все , не равны нулю.

Выполняя последовательные подстановки в последней системе, (начиная с последнего уравнения) можно получить все значения неизвестных.

3. Руководство пользователя

Программа предназначена для работы с матрицами размерностью n*n.

Запуск программы осуществляется либо набором в командной строке имени программы Метод Гаусса.exe с последующим нажатием клавиши « Enter» либо другим способом ,зависящем от конкретной операционной системы.

После запуска программы на экране появляется информационное сообщение о программе

Enter NUM of equations:

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

При вводе недопустимого значения ничего не происходит и программа ждёт ввода правильного значения.

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

a[%d][%d] =

А так же свободные члены системы линейных уравнений:

b[%d] =

После на экран выводится получившаяся матрица А и столбец свободных членов В:

See input

Matrix A:

Vector B:

Solving on Gauss method

После линейных преобразований строк на экран выводится преобразованная в ступенчатую матрицу А и преобразованный столбец свободных членов В.

Forvard Gauss course

Matrix A:

Vector B:

Далее выполняется последовательное нахождение неизвестных х и вывод результата:

Back Gauss course

Results:

После пользователю предлагается ввести символ для продолжения использования программы. При нажатии другого символа программа завершает работу.

4. Руководство программиста

4.1. Структура программы

Прикладная программа разработана с использованием принципов модульного программирования. Она является совокупностью взаимодействующих модулей. Модули объединяются в единую программу путем компоновки соответствующих объектных файлов. Структура программы:

1. Main.cpp-головной модуль

2. show_vector.cpp, show_vector.h- служит для вывода столбцом свободных членов. матрицы на экран

3. pryamoi_hod.cpp,pryamoi_hod.h-модуль служит для вывода получившейся матрицы путем линейных преобразований на экран

4. obratni_hod.cpp, obratni_hod.h-модуль служит для нахождения неизвестных и вывода результата на экран

5. Заключение

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

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

6. Список рекомендуемой литературы

1. Керниган, Брайан У., Ритчи, Деннис М. Язык программирования С, 2-е издание.: Пер. с анг.- М.: Вильямс, 2006.

2. С.А. Орлов. Технологии разработки программного обеспечения. Учебное пособие. 2-е изд. - СПб.: Питер, 2003. - 480 с.: ил.

3. Шилдт, Герберт. Полный справочник по С, 4-е издание.: Пер. с анг.- М.: Вильямс, 2005.

4. Борисенко В.В. Основы программирования - Интернет-университет информационных технологий - ИНТУИТ.ру, 328 стр. - 2005 г.

5. Костюкова Н.И., Калинина Н.А. Язык Си и особенности работы с ним - Интернет-университет информационных технологий - ИНТУИТ.ру, 208 стр. 2006 г.

6. Крутицкая Н.И., Тихонравов А.В., Шишкин А.А., Аналитическая геометрия и линейная алгебра с приложениями

7. Приложение

7.1. Основная программа

// main.cpp

// головной модуль приложения

#include <stdio.h> //i/o

#include <conio.h> //getch

#include <math.h>

#include "obratni_hod.h"

#include "pryamoi_hod.h"

#include "show_vector.h"

int main()

{

int i,j,n;

double **a, *b, *x;

do

{

printf("Enter NUM of equations: ");

scanf("%d",&n);

//Выделяем память под матрицу А и векторы В и Х

a = (double **)malloc(n*sizeof(double));

b = (double *)malloc(n*sizeof(double));

x = (double *)malloc(n*sizeof(double));

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

{

a[i] = (double *)malloc(n*sizeof(double));

//Ввод a

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

{

printf("a[%d][%d] = ",i + 1,j + 1);

scanf("%lf",&a[i][j]);

}

}

//Ввод b

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

{

printf("b[%d] = ",i + 1);

scanf("%lf",&b[i]);

}

printf("\tSee input\r\n");

printf("Matrix A:\r\n");

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

ShowVector(n, a[i]);

printf("Vector B:\r\n");

ShowVector(n, b);

printf("\tSolving on Gauss method\r\n");

PryamoiHod(n, a, b);

printf("Forvard Gauss course\r\n");//Прямой ход

printf("Matrix A:\r\n");

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

ShowVector(n, a[i]);

printf("Vector B:\r\n");

ShowVector(n, b);

ObratniHod(n, a, b, x);

printf("Back Gauss course\r\n");//Обратный ход

printf("Matrix A:\r\n");

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

ShowVector(n, a[i]);

printf("Vector B:\r\n");

ShowVector(n, b);

printf("Results :\r\n");

ShowVector(n, x);

printf("Press Y for new input\r\n");

//Чистим память

free((void *)a);

free((void *)b);

free((void *)x);

}

while(toupper(getch()) == 'Y');

return 0;

}

7.2. Модуль «obratni_hod»

// obratni_hod.h

// интерфейс модуля "obratni_hod.h "

#ifndef obratni_vector_h

#define obratni_vector_h

#include <stdio.h>

void ObratniHod(int n, double **a, double *b, double *x);

#endif

// obratni_hod.cpp

// реализация модуля "obratni_hod "

#include "obratni_hod.h"

void ObratniHod(int n, double **a, double *b, double *x)

{

double s = 0;

x[n - 1] = 1.0*b[n - 1]/a[n - 1][n - 1];

for(int i = n - 2, j; 0 <= i; i--)

{

s = 0;

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

{

s = s+a[i][j]*x[j];

}

x[i] = 1.0*(b[i] - s)/a[i][i];

}

}

7.3. Модуль «pryamoi_hod»

// pryamoi_hod.h

// интерфейс модуля " pryamoi_hod.h"

#ifndef pryamoi_hod_h

#define pryamoi_hod_h

#include <stdio.h> //i/o

void ShowVector(int n, double * vec);

#endif

// pryamoi_hod.cpp

// реализация модуля " pryamoi_hod"

#include "pryamoi_hod.h"

void PryamoiHod(int n, double **a, double *b)

{

double v;

for(int k = 0,i,j,im; k < n - 1; k++)

{

im = k;

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

{

if(fabs(a[im][k]) < fabs(a[i][k]))

{

im = i;

}

}

if(im != k)

{

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

{

v = a[im][j];

a[im][j] = a[k][j];

a[k][j] = v;

}

v = b[im];

b[im] = b[k];

b[k] = v;

}

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

{

v = 1.0*a[i][k]/a[k][k];

a[i][k] = 0;

b[i] = b[i] - v*b[k];

if(v != 0)

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

{

a[i][j] = a[i][j] - v*a[k][j];

}

}

}

}

7.4. Модуль «show_vector»

// show_vector.h

// интерфейс модуля " show_vector"

#ifndef show_vector_h

#define show_vector_h

#include <stdio.h>

#include <math.h>

void PryamoiHod(int n, double **a, double *b);

#endif

// show_vector.cpp

// реализация модуля "show_vector"

#include "show_vector.h"

void ShowVector(int n, double * vec)

{

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

printf("%.3f ",vec[i]);

printf("\r\n");

}

Размещено на Allbest.ru


Подобные документы

  • Изучение основных этапов проектирования программных систем, создание прикладной программы, которая выполняет решение систем линейных алгебраических уравнений методом Гаусса. Вычисление определителя и обращение матриц. Листинг разработанной программы.

    курсовая работа [563,3 K], добавлен 12.07.2012

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

    курсовая работа [431,8 K], добавлен 15.06.2013

  • Системы линейных алгебраических уравнений. Решение систем уравнений графическим способом. Разработка программного кода модуля, реализующего приближенное решение систем линейных уравнений графическим способом. Отладка программного модуля "Метод Гаусса".

    курсовая работа [858,5 K], добавлен 01.12.2013

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

    лабораторная работа [71,1 K], добавлен 10.12.2014

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

    курсовая работа [269,6 K], добавлен 07.01.2016

  • Системы линейных алгебраических уравнений. Код программы для решения систем линейных алгебраических уравнений. Математические и алгоритмические основы решения задачи методом Гаусса. Программная реализация решения. Алгоритмы запоминания коэффициентов.

    лабораторная работа [23,5 K], добавлен 23.09.2014

  • Понятия систем линейных уравнений и матриц. Решение общей системы линейных уравнений по методу Гаусса. Системные требования, методы установки, удаления и работы с программой. Методы защиты от неверного ввода данных. Тестирование и опытная эксплуатация.

    курсовая работа [751,0 K], добавлен 25.02.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.