Разработка программного комплекса решения математической задачи численными методами
Характеристика особенностей алгоритма решения системы линейных независимых уравнений методом Крамера. Характеристика структуры программы. Анализ основных этапов вызова и загрузки. Рассмотрение технических программных средств, используемых при вводе.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 07.11.2013 |
Размер файла | 1,1 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
ЛИПЕЦКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
КАФЕДРА АСУ
Курсовая работа №1
Программирование на ЯВУ
«Разработка программного комплекса решения математической задачи численными методами»
Липецк 2012
1. Описание программы
1.1 Общие сведения
Программа: «Решение системы линейных уравнений методом Крамера»
Название программы: «MetodKramer.exe»
Программное обеспечение, необходимое для функционирования программы:
Операционная среда Windows 95/98/Me/2k/XP/Vista/7
Средаразработки: Microsoft Visual Studio 2008
Программа написана на языке MicrosoftVisualC++ 2008
1.2 Функциональное назначение
Настоящая программа предназначена для решения системы линейных уравнений, записанной в виде матрицы коэффициентов, стоящих при соответствующих переменных. Используется метод решения системы линейных уравнений методом Крамера.
1.2.1 Классы решаемых задач
Нахождение решения системы линейных уравнений методом Крамера.
1.2.2 Функциональные ограничения
Программа корректно работает только для системы линейных линейно независимых уравнений. Количество уравнений не может быть большим 13.
1.3 Описание логической структуры
1.3.1 Алгоритм используемого метода
Алгоритм программы основан на алгоритме решения системы линейных линейно независимых уравнений методом Крамера
Метод Крамера состоит в том, что последовательно находится главный определитель системы и n вспомогательных определителей i , которые получаются из определителя заменой i-го столбца столбцом свободных членов.
- Главный определитель, составленный из коэффициентов системы
Для системы n линейных уравнений с n неизвестными с определителем матрицы системы Д, отличным от нуля, решение записывается в виде
i-ый столбец матрицы системы заменяется столбцом свободных членов.
Если главный определитель системы Д и все вспомогательные определители Дi = 0, то система имеет бесчисленное множество решений.
Если главный определитель системы Д = 0, а хотя бы один вспомогательный определитель отличен от нуля, то система решений не имеет.
1.3.2 Структура программы
Сразу после загрузки главного окна программа ожидает введения исходных данных. В дальнейшем происходят события, зависящие от действий пользователя. Если пользователь ввел корректные исходные данные, то программа выполняется. Иначе, если пользователь ввел недопустимый символ в поле программы, ввел текстовые данные, то выдается диагностическое сообщение для каждого поля, в котором допущена ошибка ввода с указанием номера поля.
1.4 Вызов и загрузка
Для вызова программы необходимо запустить файл Kramer.exe из текущей папки программы.
1.5 Входные данные
Коэффициенты при переменных в уравнениях. Данные быть введены в виде десятичной дроби со знаком или без (для отделения дробной части используется знак «,»), а также в виде целого числа, которое в ходе программы преобразуется в вещественное.
1.6 Выходные данные
Коэффициенты при соответствующих переменных, а также погрешность на эти коэффициенты, которые могут быть выведены в виде десятичной дроби со знаком (выводится только знак «-», если он есть, знак «+» опускается), а также в виде целого числа.
2. Описание Применения
2.1 Назначение программы
Программа предназначена для решения системы линейных уравнений, записанной в виде матрицы коэффициентов, стоящих при соответствующих переменных. Используется метод решения системы линейных уравнений методом Крамера.
2.2 Условия применения
2.2.1 Условия применения
Минимальные требования:
- Процессор IntelPentium II.
- Наличие не менее 16Mб ОЗУ.
- Наличие не менее 1Мб свободного дискового пространства.
- SVGA - графический адаптер.
- Минимальный набор периферийного оборудования.
2.2.2 Функциональные ограничения
Программа корректно работает только для системы линейных линейно независимых уравнений без свободных переменных, т.е. количество различных переменных в уравнениях должно быть не больше числа самих уравнений. Количество уравнений не может быть большим 13.
2.3 Описание задачи
Процесс разработки интерактивной прикладной программы, осуществляет решение определенной системы линейных линейно независимых уравнений методом Крамера.
Определение: линейным уравнением называется линейная комбинация вида:
C1x1 + C2x2 + … + Cnxn = b;
где Ci - некоторые коэффициенты при переменных;
xi - переменные первой степени;
b - свободный член.
Определение: линейно независимой системой уравнений называется система уравнений, в которой какое-либо уравнение не может быть линейной комбинацией других уравнений этой же системы.
Определение: определенной системой уравнений называется система уравнений, имеющая строго одно решение.
Метод Крамера состоит в том, что последовательно находится главный определитель системы и n вспомогательных определителей i , которые получаются из определителя заменой i-го столбца столбцом свободных членов.
- Главный определитель, составленный из коэффициентов системы
Для системы n линейных уравнений с n неизвестными с определителем матрицы системы Д, отличным от нуля, решение записывается в виде
i-ый столбец матрицы системы заменяется столбцом свободных членов.
Если главный определитель системы Д и все вспомогательные определители Дi = 0, то система имеет бесчисленное множество решений.
Если главный определитель системы Д = 0, а хотя бы один вспомогательный определитель отличен от нуля, то система решений не имеет.
2.4 Входные данные
Коэффициенты при переменных в уравнениях. Данные быть введены в виде десятичной дроби со знаком или без (для отделения дробной части используется знак «,»), а также в виде целого числа, которое в ходе программы преобразуется в вещественное.
2.5 Выходные данные
Коэффициенты при соответствующих переменных, а также погрешность на эти коэффициенты, которые могут быть выведены в виде десятичной дроби со знаком (выводится только знак «-», если он есть, знак «+» опускается), а также в виде целого числа.
3. Руководство программиста
3.1 Назначение и условия применения программы
3.1.1 Назначение программы
Программа предназначена для нахождения решения системы линейных уравнений, задаваемых коэффициентами при соответствующих переменных. Программа имеет некоторые ограничения, которые необходимо учитывать пользователю при вводе тех или иных параметров. В любом случае параметры проверяются перед расчетом.
3.1.2 Условия применения программы
- Процессор IntelPentium II.
- Наличие не менее 16Mб ОЗУ.
- Наличие не менее 1Мб свободного дискового пространства.
- SVGA - графический адаптер.
- Минимальный набор периферийного оборудования.
3.2 Характеристики программы
Для выполнения программы требуется сравнительно небольшой промежуток времени.
В программе присутствует проверка введенных данных, что позволяет предотвратить возможные ошибки и оповестить об этом пользователя о необходимости их корректировки.
Возможность вывода хода решения
3.3 Вызов и загрузка
Для начала работы программы необходимо запустить файл Kramer.exe
Входные точки:
кнопка «Ввести данные»
кнопка «Решить систему»
кнопка «Справка»
3.4 Данные
3.4.1 Входные данные
- число уравнений в системе, целое число
- коэффициенты при соответствующих переменных в соответствующих
уравнениях, числа вещественные
3.4.2 Выходные данные
- решение в виде коэффициентов при соответствующих переменных,
числа вещественные;
- погрешность в виде степени десяти, может использоваться:
1) число вещественное в коде стандарта IBNPC для формата типа double;
2) символьная информация в коде ASCI
3.5 Сообщения
Сообщения, возникают на экране во время выполнения данной программы в случае пяти возможных ошибок:
Пользователь не ввел число уравнений в системе:
«Ничего не введено!»
2) Пользователь ввел нецелое число уравнений в системе или число больше 13:
«Должно быть целое положительное число не больше 13!»
3) Пользователь не ввел в какую-либо ячейку коэффициент при переменной:
«Остались незаполненные поля»
Пользователь ввел нечисловые данные
«Введено нечисловое значение»
Главный определитель системы равен 0:
«Главный определитель равен 0! Система не имеет единственного решения»
Файл со справкой отсутствует в одной папке с программой:
«Файл справки не найден»
алгоритм крамер линейный уравнение
4. Описание контрольного предмета
4.1 Назначение программы
Программа предназначена для решения системы линейных уравнений методом Крамера. Программа имеет некоторые ограничения, которые необходимо учитывать пользователю при вводе тех или иных параметров. В любом случае параметры проверяются перед расчетом.
4.2 Целью проведения испытаний
Проверить правильность нахождения решения системы линейных уравнений методом Крамера.
4.3 Требования, подлежащие проверке
- Правильность нахождения решения системы линейных уравнений;
- Верность выдаваемых сообщений об ошибке или предупредительных сообщений при наличии данных, некорректно введенных пользователем.
4.4 Технические программные средства, используемые при вводе
Технические средства: компьютер типа IBMPC, монитор, мышь и клавиатура.
Программные средства: операционная система Microsoft WindowsXPProfessional и тестируемая программа.
4.5 Порядок проведения тестирования
- Вести значения, соответствующие проверяемым требованиям;
- Отследить результаты работы программы;
- Сравнить полученные значения с ожидаемыми результатами.
4.6 Используемые методы тестирования
4.6.1 Проверка правильности решения системы линейных уравнений
1) Введем число уравнений в системе, равное 3
Ввод количества уравнений в системе (рис. 1)
Введем коэффициенты:
1 6 2 0
4 7 8 10
1 2 3 5
Ввод коэффициентов системы (рис. 2)
Ожидаемое значение:
x1 = -1,76
x2 = -0,59
x3 = 2,65
Рассчитаем:
Полученное решение (рис. 3)
4.6.2 Проверка поведения программы при заведомо неправильных входных данных
Пользователь не ввел число уравнений в системе:
Пользователь не ввел число уравнений в системе (рис. 4)
2) Пользователь ввел нецелое число уравнений в системе или число больше 13:
Введено нецелое число уравнений в системе (рис.5)
3) Пользователь не ввел в какую-либо ячейку коэффициент при переменной: Введены не все коэффициенты (рис.6)
Пользователь ввел нечисловые данные
Введено нечисловое значение (рис.7)
Главный определитель системы равен 0:
Главный определитель равен 0 (рис.8)
5. Текст программы
#include<iostream>
#include<string.h>
usingnamespace std;
constint MAX_SIZE = 20;
void initialize(float&, float *, float *, float *);
void allocate_floats(int&, float *&, float *&, float *&);
void initialize_dynamic_memory(float *, int);
void get_matrices(float [][MAX_SIZE], float *, int);
void calculate_variable_matrix(float&, float *, float *, float [][MAX_SIZE], float *, int);
void print_results(float *, float *, int, float);
void return_memory(float *, float *, float *);
void calculate_determinant(float&, float [][MAX_SIZE], int);
void calculate_modified_determinant(float *, float [][MAX_SIZE], float [], int);
void calculate_variables(float *, float *, float, int);
void print_determinants(float *, int, float);
void print_variables(float *, int, float);
void copy_matrix(float[][MAX_SIZE], float [][MAX_SIZE], int);
bool swap_rows(float [][MAX_SIZE], int, int);
int main()
{ setlocale (LC_ALL, "rus");
int size;
float coefficient[MAX_SIZE][MAX_SIZE], *variable, *constant, *determinant_modified, determinant_original;
char quit[1];
char yes[] = "y";
do
{
//initialize(determinant_original, variable, constant, determinant_modified);
allocate_floats(size, variable, constant, determinant_modified);
initialize_dynamic_memory(determinant_modified, size);
get_matrices(coefficient, constant, size);
calculate_variable_matrix(determinant_original, determinant_modified, variable, coefficient, constant, size);
print_results(variable, determinant_modified, size, determinant_original);
return_memory(variable, constant, determinant_modified);
cout <<"Вычислить еще матрицу (y/n)? ";
cin >> quit;
} while (strcmp(quit, yes) == 0);
return 0;
}
void initialize(float&i_determinant_original, float *i_variable, float *i_constant, float *i_determinant_modified)
{
i_determinant_original = 1;
i_variable = NULL;
i_constant = NULL;
i_determinant_modified = NULL;
return;
}
void allocate_floats(int&af_size, float *&af_variable, float *&af_constant, float *&af_determinant_modified)
{
cout <<"Vvedite razmernost matrix А: ";
cin >> af_size;
while ((af_size < 1) || (af_size > 20))
{
cout <<"Допыстимая размерность от 2 до 20."<< endl;
cout <<"Попробуйте еще раз n: ";
cin >> af_size;
}
af_variable = newfloat[af_size];
af_constant = newfloat[af_size];
af_determinant_modified = newfloat[af_size];
return;
}
void initialize_dynamic_memory(float *idm_determinant_modified, int idm_size)
{
int i;
for (i = 0; i < idm_size; i ++)
idm_determinant_modified[i] = 1;
return;
}
void get_matrices(float gm_coefficient[][MAX_SIZE], float *gm_constant, int gm_size)
{
int i, j;
cout << endl;
cout <<"Vvedite matrix koephicientov (A)."<< endl;
for (i = 0; i < gm_size; i ++)
{
cout <<"Ряд "<< i + 1 <<": ";
for (j = 0; j < gm_size; j ++)
cin >> gm_coefficient[i][j];
}
cout << endl;
cout <<"Введите матрицу свободных членов (b)."<< endl;
for (i = 0; i < gm_size; i ++)
{
cout <<"Ряд "<< i + 1 <<": ";
cin >> gm_constant[i];
}
return;
}
void calculate_variable_matrix(float&cvm_determinant_original, float *cvm_determinant_modified, float *cvm_variable, float cvm_coefficient[][MAX_SIZE], float *cvm_constant, int cvm_size)
{
if (cvm_size == 1)
{
cvm_determinant_original = cvm_coefficient[0][0];
cvm_determinant_modified[0] = cvm_constant[0];
}
else
{
calculate_determinant(cvm_determinant_original, cvm_coefficient, cvm_size);
calculate_modified_determinant(cvm_determinant_modified, cvm_coefficient, cvm_constant, cvm_size);
}
calculate_variables(cvm_variable, cvm_determinant_modified, cvm_determinant_original, cvm_size);
return;
}
void print_results(float *pr_variable, float *pr_determinant_modified, int pr_size, float pr_determinant_original)
{
print_determinants(pr_determinant_modified, pr_size, pr_determinant_original);
print_variables(pr_variable, pr_size, pr_determinant_original);
return;
}
void return_memory(float *rm_variable, float *rm_constant, float *rm_determinant_modified)
{
delete [] rm_variable;
delete [] rm_constant;
delete [] rm_determinant_modified;
return;
}
void calculate_determinant(float&cd_determinant, float cd_coefficient[][MAX_SIZE], int cd_size)
{
int i, j, k, l;
float temp_co, temp_mat[MAX_SIZE][MAX_SIZE];
copy_matrix(cd_coefficient, temp_mat, cd_size);
for (i = 0; i < cd_size; i ++)
{
if (temp_mat[i][i] == 0)
{
if (swap_rows(temp_mat, i, cd_size) == false)
{
cd_determinant = 0;
return;
}
else
cd_determinant *= -1;
}
if (temp_mat[i][i] != 1)
{
temp_co = temp_mat[i][i];
cd_determinant *= temp_mat[i][i];
for (j = i; j < cd_size; j ++)
temp_mat[i][j] = temp_mat[i][j] / temp_co;
}
for (k = i + 1; k < cd_size; k ++)
for (l = (cd_size - 1); l >= i; l --)
temp_mat[k][l] = temp_mat[k][l] - (temp_mat[k][i] * temp_mat[i][l]);
}
return;
}
void calculate_modified_determinant(float cmd_determinant_modified[], float cmd_coefficient[][MAX_SIZE], float *cmd_constant, int cmd_size)
{
int i, j;
float temp_mat[MAX_SIZE][MAX_SIZE];
for (i = 0; i < cmd_size; i ++)
{
copy_matrix(cmd_coefficient, temp_mat, cmd_size);
for (j = 0; j < cmd_size; j ++)
temp_mat[j][i] = cmd_constant[j];
calculate_determinant(cmd_determinant_modified[i], temp_mat, cmd_size);
}
return;
}
void calculate_variables(float *cv_variable, float *cv_determinant_modified, float cv_determinant_original, int cv_size)
{
int i;
for (i = 0; i < cv_size; i ++)
cv_variable[i] = cv_determinant_modified[i] / cv_determinant_original;
return;
}
void print_determinants(float *pd_determinant_modified, int pd_size, float pd_determinant_original)
{
int i;
cout << endl <<"Список всех определителей:"<< endl;
cout <<"Det(A) = "<< pd_determinant_original << endl;
for (i = 0; i < pd_size; i ++)
cout <<"Det(A"<< i + 1 <<") = "<< pd_determinant_modified[i] << endl;
return;
}
void print_variables(float *pv_variable, int pv_size, float pv_determinant_original)
{
int i;
cout << endl;
if (pv_determinant_original == 0)
cout <<"Правило Крамера не работает с вырожденными матрицами Det(A) = 0."<< endl;
else
{
cout <<"Результат:"<< endl;
for (i = 0; i < pv_size; i ++)
cout <<"x"<< i + 1 <<" = "<< pv_variable[i] << endl;
}
return;
}
void copy_matrix(float matrix1[][MAX_SIZE], float matrix2[][MAX_SIZE], int cm_size)
{ int i, j;
for (i = 0; i < cm_size; i ++)
for (j = 0; j < cm_size; j ++)
matrix2[i][j] = matrix1[i][j];
return;
} bool swap_rows(float matrix[][MAX_SIZE], int sr_i, int sr_size)
{
int initRow = sr_i, initCol = sr_i, i, j;
float temp;
for (i = initRow; i < sr_size; i ++)
if (matrix[i][initCol] != 0)
{
for (j = initCol; j < sr_size; j ++)
{
temp = matrix[initRow][j];
matrix[initRow][j] = matrix[i][j];
matrix[i][j] = temp;
}
returntrue;
}
returnfalse;
}
Библиографический список
1) Википедия - Свободная энциклопедия. Метод Крамера// http://ru.wikipedia.org/wiki/Метод_Крамера
2) Страуструп Б. Язык программирования С++. Специальное издание, 3-изд. Бином.2004
3) Шилдт Г. Искусство программирования на C++. БХВ.2005
Размещено на Allbest.ru
...Подобные документы
История развития алгоритмических языков. Создание языка С++. Разработка программы в Visual C++ для решения линейных уравнений методом Крамера. Структура данных, этапы тестирования программного обеспечения на работоспособность и корректность расчетов.
курсовая работа [390,0 K], добавлен 29.12.2014Общее понятие о линейных уравнениях и их системах. Разработка программного продукта в среде Delphi 7 для решения методом Крамера квадратных систем линейных алгебраических уравнений с ненулевым определителем основной матрицы. Описание конкретных примеров.
курсовая работа [193,7 K], добавлен 07.07.2013Системы линейных алгебраических уравнений. Матричный метод решения систем линейных уравнений. Решение задачи математическим методом. Блок-схема алгоритма и листинг программы. Расчет трудоемкости разработки программы. Расчет себестоимости и цены программы.
дипломная работа [144,8 K], добавлен 25.04.2012Разработка программы для решения системы линейных уравнений методом Крамера и с помощью расширенной матрицы на языке С++. Описание метода Крамера. Структура программы: заголовочные файлы, типы данных, переменные, идентификаторы, операторы, массивы.
курсовая работа [32,3 K], добавлен 19.01.2009Этапы развития языков программирования. Способы решения системы линейных алгебраических уравнений методом Крамера, рассмотрение особенностей. Анализ языка программирования С++. С # как прямой потомок двух самых успешных в мире компьютерных языков.
курсовая работа [770,2 K], добавлен 27.01.2013Сущность матричного метода. Разработка программы решения системы уравнений линейных алгебраических уравнений методом решения через обратную матрицу на языке программирования Delphi. Представление блок-схемы и графического интерфейса программного продукта.
курсовая работа [1,0 M], добавлен 27.09.2014Решение систем алгебраических линейных уравнений методом Крамера. Сущность метода прогонки. Программная реализация метода: блок-схема алгоритма, листинг программы. Проверка применимости данного способа решения для конкретной системы линейных уравнений.
курсовая работа [581,0 K], добавлен 15.06.2013Использование MS Excel для математических расчетов. Описание численных методов решения системы линейных алгебраических уравнений. Решение систем линейных алгебраических уравнений с методами Крамера и Зейделя и с помощью табличного процессора MS Excel.
курсовая работа [1,6 M], добавлен 14.02.2021Изучение основных этапов проектирования программных систем, создание прикладной программы, которая выполняет решение систем линейных алгебраических уравнений методом Гаусса. Вычисление определителя и обращение матриц. Листинг разработанной программы.
курсовая работа [563,3 K], добавлен 12.07.2012Системы линейных алгебраических уравнений. Код программы для решения систем линейных алгебраических уравнений. Математические и алгоритмические основы решения задачи методом Гаусса. Программная реализация решения. Алгоритмы запоминания коэффициентов.
лабораторная работа [23,5 K], добавлен 23.09.2014Сущность и особенности языка программирования Си. Основные этапы алгоритма решения системы линейных алгебраических уравнений методом Гаусса, реализация программы для их расчета. Инструкции пользователя и программиста. Тестирование функции решения.
курсовая работа [153,9 K], добавлен 18.02.2013Описание математической модели определения тока в электрической цепи с помощью решения системы алгебраических уравнений методом Гаусса. Описание и разработка блок-схемы программы. Ввод данных задачи, составление программы и анализ результатов решения.
контрольная работа [231,8 K], добавлен 15.08.2012Разработка технологии обработки информации, а также структуры и формы представления данных. Подбор алгоритма и программы решения задачи. Определение конфигурации технических средств. Специфика процесса тестирования и оценки надежности программы.
курсовая работа [959,1 K], добавлен 12.12.2011Математический алгоритм вычисления корней нелинейного уравнения и его решение методом касательных. Особенности программной реализации решения таких уравнений. Процедура подготовки и решения задачи на ЭВМ, характеристика алгоритма и структуры программы.
курсовая работа [96,6 K], добавлен 02.06.2012Метод Гаусса-Зейделя как модификация метода Якоби, его сущность и применение. Разработка программы решения системы линейных алгебраических уравнений на языке VB, проверка правильности работы программы в MS Excel и математических пакетах MathCad и MatLab.
курсовая работа [325,5 K], добавлен 27.10.2013Требования к языкам программирования, их эффективность, лаконичность, ясность, реальные возможности. Создание языка С#. Применение систем линейных алгебраических уравнений для практических задач, сущность и особенности метода Крамера для их решения.
курсовая работа [118,1 K], добавлен 13.11.2009Изучение систем линейных алгебраических уравнений (СЛАУ) с использованием табличного процессора MS Excel 2007. Пример решения системы линейных алгебраических уравнений методом Крамера. Прикладное программное обеспечение, применяемое для решения СЛАУ.
курсовая работа [184,5 K], добавлен 20.11.2013Характеристика задачи АВ01, ее выходная и входная информация, выбор и обоснование состава технических средств и средств программной реализации. Разработка алгоритма и программы решения задачи АВ01, руководства пользователя и контрольный пример решения.
курсовая работа [2,1 M], добавлен 21.12.2011Автоматизация решения системы уравнения методом Гаусса (классического метода решения системы линейных алгебраических уравнений, остоящего в постепенном понижении порядка системы и исключении неизвестных) и решения уравнения методами хорд и Ньютона.
курсовая работа [578,2 K], добавлен 10.02.2011Обзор существующих методов по решению нелинейных уравнений. Решение нелинейных уравнений комбинированным методом и методом хорд на конкретных примерах. Разработка программы для решения нелинейных уравнений, блок-схемы алгоритма и листинг программы.
курсовая работа [435,8 K], добавлен 15.06.2013