Автор работы: Пользователь скрыл имя, 15 Июня 2013 в 10:04, курсовая работа
В данном курсовом проекте рассмотрен пример программы системы линейных уравнений методом Гаусса. Данный метод позволяет решать системы линейных алгебраических уравнений, что гарантирует нахождение минимума в самых неблагоприятных условиях.
Цель курсовой работы – закрепление основ и углубление знаний в области объектно-ориентированного программирования, получения дополнительных практических навыков в использовании основных приёмов обработки экспериментальных данных, численного решения нелинейных и трансцендентных уравнений и определенных интегралов.
Введение 5
Задание 1 6
1.1 Формулировка задачи 6
1.2 Спецификации задачи 6
1.3 Математическая постановка задачи 6
1.4 Описание вычислительных методов 6
1.5 Текст программы и схема алгоритма 8
Блок-схема функции glavelem 13
1.6 Результаты машинного тестирования программы 14
Заключение 15
Список литературы 16
Министерство образования и науки Российской Федерации
ИНСТИТУТ СОВРЕМЕННЫХ ТЕХНОЛОГИЙ И ЭКОНОМИКИ
Кафедра Вычислительной Техники и Информационных Технологий _
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
к курсовой работе
по дисциплине Объектно-ориентированное программирование _
на тему ______________________________
______________________________
Выполнил(а) студент(ка) группы
______________________________
______________________________
Допущен к защите______________________
Руководитель проекта
Нормоконтроллер ______________________________
Защищен _______________________ Оценка _________________________
Члены комиссии ______________________________
(подпись, дата, расшифровка подписи)
Краснодар
2013
ИНСТИТУТ СОВРЕМЕННЫХ
Кафедра Вычислительной Техники и Информационных Технологий _
УТВЕРЖДАЮ Зав. кафедрой ___________________ «___» ___________________ 20___ г. |
ЗАДАНИЕ
на курсовую работу
Студенту(ке):
факультета
направления 230100 Информатики и вычислительной техники _
Тема проекта ______________________________
______________________________
Содержание задания ______________________________
______________________________
Объем работы:
а) пояснительная записка к проекту _____________ с.
б) программы.
Рекомендуемая литература:
______________________________
______________________________
Срок выполнения проекта: с "___" __________ по "____" 20 г.
Срок защиты:
Дата выдачи задания:
Дата сдачи проекта
на кафедру:
Руководитель проекта
Задание принял студент ______________________________
(подпись)
Реферат
Пояснительная записка курсовой работы 17 с., 3 рисунка, 4 таблицы, 5 источников.
СЛАУ, МЕТОД ГАУССА, МАТРИЦА, ЛИНЕНЫЕ УРАВНЕНИЯ, ВЕРХНЕТРЕУГОЛЬНЫЙ ВИД, ПРЯМОЙ ХОД, ОБРАТНЫЙ ХОД.
В данном курсовом проекте рассмотрен пример программы системы линейных уравнений методом Гаусса. Данный метод позволяет решать системы линейных алгебраических уравнений, что гарантирует нахождение минимума в самых неблагоприятных условиях.
Содержание
Цель курсовой работы – закрепление основ и углубление знаний в области объектно-ориентированного программирования, получения дополнительных практических навыков в использовании основных приёмов обработки экспериментальных данных, численного решения нелинейных и трансцендентных уравнений и определенных интегралов.
При выполнении курсовой работы студент самостоятельно выполняет все этапы создания программного продукта, от постановки задачи до практической реализации, сопровождающейся документацией и инструкциями по его использованию.
Решить систему уравнений вида Ax=b методом Гаусса в соответствии с вариантом.
Таблица 1 – Вариант задания
3 |
2,18 2,44 2,49 2,17 2,31 2,49 3,15 3,22 3,17 |
-4,34 -3,91 -5,27 |
Входные данные:
- уравнение вида Ax=b
Выходные данные:
- решение уравнения Ax=b
Таблица 2 – Вариант задания
Характеристика переменных | |||
Имя переменной |
Смысл переменной |
Назначение переменной |
Ограничения |
n |
Число уравнений системы |
Исходная |
<50 |
mas |
Система уравнений |
Исходная |
|
x |
Решение уравнения |
Результат |
Методом Гаусса называют точный метод решения невырожденной системы линейных уравнений, состоящий в том, что последовательным исключением неизвестных систему
i=1,2...., n
приводят к эквивалентной
x1+c12 x2+...+c1n xn = d1 ,
x2+...+c2n xn =d2 ,
..............................
xn=dn ,
решение которой находят по рекуррентным формулам
xi=di- , xn=dn , i=n-1,n-2,...,1.
Существует много вариантов этого метода. Рассмотрим схему с выбором главного элемента. Пусть исходная система имеет вид
a11x1+...+a1nxn=b1
,
..............................
an1x1+...+annxn=bn.
Предположим, что a11¹0. Разделим обе части первого уравнения системы на a11. В результате получим
x1+b12x2+...+b1nxn=b1(1),
где b1j=a1j/a11, j=2,3,..., b1(1)=b1/a11. С помощью уравнения (2) исключим во всех уравнениях системы (1), начиная со второго, слагаемые, содержащие х1. Для этого умножаем обе части уравнения (2) последовательно на a21,a31,...an1и вычитаем соответственно из второго, третьего,..., n-го уравнения системы (1). В результате получаем систему, порядок которой на единицу меньше порядка исходной системы:
a22(1)x2+...+a2n(1)xn=b2(1),
..............................
an2(1)x2+...+ann(1)xn=bn(1),
где aij(1)=aij-ai1b1, i,j=2,3,...,n, bi(1)=bi-ai1b1, i=2,3,...,n.
Аналогично преобразуем
x1+c12x2+...+c1nxn=d1 ,
x2+c23x3+...+c2nxn=d2
,
..............................
xn=dn ,
которая эквивалентна системе (1) и легко решается. В самом деле, из последнего уравнения находим xn, подставляя xn в предпоследнее уравнение, найдем хn-1, затем хп-2 и т.д. до х1, которое находим из первого уравнения системы, когда уже известны x, хп-1, хп-.2,..., х2.
Таким образом, вычисления по методу Гаусса распадаются на два этапа: на первом этапе, называемом прямым ходом метода, исходную систему преобразуют к треугольному виду. На втором этапе, который называют обратным ходом, решают треугольную систему (3), эквивалентную исходной.
Коэффициенты a11,a22(1),а33(2) называют ведущими элементами метода Гаусса. На каждом шаге предполагалось, что akk(k-1)¹0. Если окажется, что это не так, то в качестве ведущего элемента можно использовать любой другой ненулевой коэффициент системы. Однако, если коэффициент akk(k-1)¹0 мал, то после деления на этот элемент и вычитания k-го уравнения из последующих возникают большие погрешности округления. Чтобы избежать этого, на каждом этапе уравнения переставляют так, чтобы на главной диагонали оказался наибольший по модулю элемент k-го столбца. Если матрица системы хорошо обусловлена, то в методе Гаусса с выбором главного элемента погрешности округления невелики. Одновременно с решением системы можно найти определитель матрицы системы. Нетрудно убедиться, что определитель матрицы системы равен произведению ведущих элементов, т. е. a11 a22(1)...аnn(n-1).
//Решение системы лин.
//с выбором главного элемента
#include <stdio.h>
#include <conio.h>
#include <math.h>
#define N 50
void glavelem( int k, double mas[] [N + 1], int n, int otv[] );
int main( void )
{
double mas[N] [N + 1];
double x[N]; //Корни системы
int otv[N]; //Отвечает за порядок корней
int i, j, k, n;
//Ввод данных
clrscr();
do
{
printf( "Vvedite chislo uravnenii v sisteme: " );
scanf( "%d", & n );
if ( N < n )
printf( "Slishkom bolshoe chislo uravnenii. Povtorite vvod\n" );
}
while ( N < n );
printf( "Vvedite sistemu:\n" );
for ( i = 0; i < n; i++ )
for ( j = 0; j < n + 1; j++ )
scanf( "%lf", & mas[i] [j] );
//Вывод введенной системы
clrscr();
printf( "Sistema:\n" );
for ( i = 0; i < n; i++ )
{
for ( j = 0; j < n + 1; j++ )
printf( "%7.2f ", mas[i] [j] );
printf( "\n" );
}
//Сначала все корни по порядку
for ( i = 0; i < n + 1; i++ )
otv[i] = i;
//Прямой ход метода Гаусса
for ( k = 0; k < n; k++ )
{ //На какой позиции должен стоять главный элемент
glavelem( k, mas, n, otv ); //Установка главного элемента
if ( fabs( mas[k] [k] ) < 0.0001 )
{
printf( "Sistema ne imeet edinstvennogo resheniya" );
return ( 0 );
}
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];
}
//Обратный ход
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( "Otvet:\n" );
for ( i = 0; i < n; i++ )
for ( j = 0; j < n; j++ )
if ( i == otv[j] )
{ //Расставляем корни по порядку
printf( "%f\n", x[j] );
break;
}
return ( 0 );
}
//----------------------------
//Описание функции
//----------------------------
void glavelem( int k, double mas[] [N + 1], int n, int otv[] )
{
int i, j, i_max = k, j_max = k;
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;
}
//Переставляем столбцы
for ( i = 0; i < n; i++ )
{
temp = mas[i] [k];
mas[i] [k] = mas[i] [j_max];
mas[i] [j_max] = temp;
}
//Учитываем изменение порядка корней
i = otv[k];
otv[k] = otv[j_max];
otv[j_max] = i;
}
Рисунок 1 – Блок-схема алгоритма основной программы
Рисунок 2 – Блок-схема алгоритма функции glavelem
Рисунок 3 – Результаты машинного тестирования
В ходе выполнения курсовой работы разработаны две программы с использованием Microsoft Visual C++ 9.0 Express Edition для решения системы уравнения методом Гаусса и решения задачи Коши методом Эйлера. Составлены схемы алгоритма для каждой задачи. Разработанные программы были протестированы тестовыми примерами.