Программа для расчета корня уравнения
Разработка программы для расчета корня уравнения в определенном отрезке, по количеству итераций. Рисование в окне консоли на языке программирования C++. Реализация вывода графика функции и корня уравнения. Математическая модель и алгоритм решаемой задачи.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 09.07.2017 |
Размер файла | 521,3 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Содержание
- Введение
- 1. Задача
- 2. Математическая модель решаемой задачи
- 2.1 Поиск корней функции
- 3. Алгоритм решения задачи
3.1 Описание блок-схемы алгоритма
3.1.1 Описание процедуры DrawGraph()
3.1.2 Описание функции MaxABSValue()
3.1.3 Описание функции f()
- Заключение
Список использованных источников
Приложение А
Приложение Б
Приложение В
Введение
В самом начале нашей истории для передачи информации использовался язык жестов, затем появилась устная речь. Информация должна быть полной и точной, чтобы человек мог точно ориентироваться в окружающем мире. Получение полной и точной информации о технике, обществе и о природе задача науки. Процесс научного познания начался после изобретения книгопечатания. Современный человек живет, взаимодействуя с «морем информации». Получает определенную информацию с помощью органов чувств. Хранит в памяти. С помощью мышления анализирует ее. И обменивается с другими людьми информацией.
Понятие «Информационное общество» было введено в научный оборот в 1960-х годах. В зарождающемся информационном обществе в ресурс превратилась сама информация. Существует такая поговорка: «Кто владеет информацией, тот владеет всем» и это надо помнить.
В современном информационном обществе главным ресурсом является информация. Процессы с ней базируются на информационных и коммуникационных технологиях. Информационные и коммуникационные технологии -- это методы, устройств и производственных процессов, используемых обществом для сбора, хранения, обработки и распространения информации [1].
Информационные технологии (ИТ, от англ. information technology, IT) - это класс областей деятельности, относящихся к технологиям управления и обработкой огромного потока информации с применением вычислительной техники.
Согласно определению, принятому ЮНЕСКО, Информационные Технологии (ИТ) - это комплекс взаимосвязанных научных, технологических, инженерных наук, изучающих методы эффективной организации труда людей, занятых обработкой и хранением информации с помощью вычислительной техники и методы организации и взаимодействия с людьми и производственным оборудованием, их практические применение, а также связанные со всем этим социальные, экономические и культурные проблемы.
Информационные технологии (ИТ) - это процессы, использующие совокупность средств и методов сбора, обработки и передачи данных (первичной информации) для получения информации нового качества о состоянии объекта, процесса или явления (информационного продукта). Информационная технология является процессом, состоящим из четко регламентированных правил выполнения операций, действий, этапов разной степени сложности над данными, хранящимися в компьютерах. Составляющие информационной технологии.
Используемые в производственной сфере такие технологические понятия, как норма, норматив, технологический процесс, технологическая операция и т.п., могут применяться и в информационной технологии. Прежде чем разрабатывать эти понятия в любой технологии, в том числе и в информационной, всегда следует начинать с определения цели. Затем следует попытаться провести структурирование всех предполагаемых действий, приводящих к намеченной цели, и выбрать необходимый программный инструментарий [2].
Информационная технология, как и любая другая, должна отвечать следующим требованиям:
1. обеспечивать высокую степень расчленения всего процесса обработки информации на этапы (фазы), операции, действия;
2. включать весь набор элементов, необходимых для достижения поставленной цели;
3. иметь регулярный характер. Этапы, действия, операции технологического процесса могут быть стандартизированы и унифицированы, что позволит более эффективно осуществлять целенаправленное управление информационными процессами.
Современные информационные технологии с их стремительно растущим потенциалом и быстро снижающимися издержками открывают большие возможности для новых форм организации труда и занятости в рамках, как отдельных корпораций, так и общества в целом. Спектр таких возможностей значительно расширяется - нововведения воздействуют на все сферы жизни людей, семью, образование, работу, географические границы человеческих общностей и т. д. Сегодня информационные технологии могут внести решающий вклад в укрепление взаимосвязи между ростом производительности труда, объемов производства, инвестиций и занятости.
Освоение информационной технологии и дальнейшее ее использование должны свестись к тому, что нужно сначала хорошо овладеть набором элементарных операций, число которых ограничено. Из этого ограниченного числа элементарных операций в разных комбинациях составляется действие, а из действий, также в разных комбинациях, составляются операции, которые определяют тот или иной технологический этап. Совокупность технологических этапов образует технологический процесс (технологию). Он может начинаться с любого уровня и не включать, например, этапы или операции, а состоять только из действий [3].
1. Задача
Необходимо разработать программу для расчета корня уравнения в определенном отрезке с точностью до или по количеству итераций . Также необходимо реализовать вывод графика функции и корня уравнения.
Корень уравнения находится с помощью двух способов, в зависимости от варианта:
1. метод Ньютона - касательных.
2. метод дихотомии - деления пополам.
Так как мой вариант - 19, следовательно, мне необходимо решить следующее уравнение:
(1)
где x - неизвестная переменная.
Промежуток, на котором мне необходимо найти корень - , а метод, по которому он будет найден - метод дихотомии - деления пополам.
Программа может быть выполнена на любом языке программирования, кроме Ассемблера, поэтому мой выбор остановился на - C++.
2. Математическая модель решаемой задачи
Дихотомия (греч. дйчпфпмЯб: д?ч?, «надвое» + фпмЮ, «деление») -- раздвоенность, последовательное деление на две части, не связанные между собой. Способ логического деления класса на подклассы, который состоит в том, что делимое понятие полностью делится на два взаимоисключающих понятия. Дихотомическое деление в математике, философии, логике и лингвистике является способом образования подразделов одного понятия или термина и служит для образования классификации элементов.
Дихотомия обычно используется как вспомогательный приём при установлении классификации.
Она известна также благодаря достаточно широко используемому методу поиска, так называемому методу дихотомии. Он применяется для нахождения значений действительно-значной функции, определяемых по какому-либо критерию (это может быть сравнение на минимум, максимум или конкретное число) [4].
2.1 Поиск корней функции
Будем считать, что корень функции отделён на отрезке . Задача заключается в том, чтобы найти и уточнить этот корень методом половинного деления. Другими словами, требуется найти приближённое значение корня с заданной точностью .
Пусть функция непрерывна на отрезке , и -- единственный корень уравнения . Поделим отрезок пополам. Получим точку и два отрезка .
· Если , то корень найден .
o Если нет, то из двух полученных отрезков и надо выбрать один такой, что , то есть , если или , если .
Новый отрезок делим пополам. Получаем середину этого отрезка и так далее.
Для того, чтобы найти приближённое значение корня с точностью до , необходимо остановить процесс половинного деления на таком шаге , на котором и вычислить . Тогда можно взять [5].
3. Алгоритм решения задачи
Чтобы решать данную задачу, первым делом необходимо определиться с отрезком, на котором будет происходить поиск корня по методу деления пополам, и точностью вычислений . Так как отрезок определен по задачу, то пользователю нету необходимости его вводить в программу. Для точности же, чтобы сделать программу чуть более универсальной, можно реализовать её ввод пользователем. Однако, необходимо удостовериться, что введенное число подходит под условие - .
После того, как все входные данные определенны необходимо приступить в решению задачи, выводом корня и последующим рисованием графика.
Для более точного понимания алгоритма на рисунке 1 представлена структурная схема алгоритма.
Рисунок 1 - Структурная схема алгоритма
Код программы представлен в приложении Б, а результат работы программы в приложении В.
3.1 Описание блок-схемы алгоритма
Описываемая блок-схема представлена в приложении А.
Сначала инициализируются переменные a, b, c, d типа double. Дальше для пользователя выводятся: решаемое уравнение, отрезок и метод решения. После чего для продолжения от пользователя требуется нажать <Enter>. Теперь начинается непосредственно решение уравнения. Для начала пользователю необходимо ввести точность решения, при чем данный ввод реализован через цикл while, для того чтобы, значение удовлетворяло условию , если это не так, то программа выведет соответствующее сообщение и предложит ввести заново. Дальше к переменным a и b присваиваются значения соответствующим концам отрезка. После этого программа входит в цикл while и идет расчет корня уравнения по методу дихотомии - деления пополам. Для этого к переменной с присваивается значение половины суммы от произведения переменных a и b. Дальше если произведение функции от b на функцию от c меньше нуля, то к переменной a присваивается переменная с, иначе к переменной b присваивается переменная с. После того как условие цикла while, а именно - разность b и a больше е, не выполняется, происходит выход из него. И к переменной с присваивается значение половины суммы от произведения переменных a и b, что является конечным ответом - корнем уравнения. Теперь, когда корень уравнения известен, он выводится на экран. Снова для продолжения от пользователя требуется нажать <Enter> после чего будет нарисован график. Для того чтобы нарисовать график первым делом рассчитываются точки по оси X и по оси Y, также определяется нулевой X и индексы для отрезка, чтобы обозначить его на графике отдельным цветом. Данные рассчитанные в прошлом шаге сообщаются в процедуру DrawGraph(), в которой происходит непосредственное рисование графика.
3.1.1 Описание процедуры DrawGraph()
В вышеупомянутой блок-схеме присутствует также процедура DrawGraph(), которая реализовывает вывод графика функции на экран. Для начала идёт очистка экрана, после которой определяются окно для рисования и устройство, которое будет в нём заниматься рисованием. В зависимости от количества точек, определяется шаг в пикселях по оси X между ними. С помощью функции MaxABSValue() находится максимальное абсолютное число по оси Y, для того чтобы промасштабировать график под размер окна. Рисуются прямые системы координат, обозначаются оси и их нули. И наконец происходит вывод графика. После всего окно и устройство освобождаются от рисования.
3.1.2 Описание функции MaxABSValue()
Для того, чтобы промасштабировать график под размер окна по оси Y, необходимо знать максимально возможное значение функции. Необходимо также учесть, что отрицательные значения также должны быть учтены, для этого значение функции возвращается абсолютное - по модулю.
Входные данные:
1. Массив arr[] типа float;
2. Размер массива size типа int.
Первым делом инициализируется переменная max и к ней присваивается нулевое значение из массива. Дальше с помощью цикла for, программа проверяет, нету ли значения больше чем max и если есть, то присваивает его. После того как цикл закончился, переменная max возвращается.
3.1.3 Описание функции f()
Для того чтобы находить значение функции от какого-то числа в любом месте программы, была введена эта функция.
Входные данные:
1. Значение x типа double.
В уравнение вместо неизвестной переменной x подставляется число со входа и функция возвращает получившийся ответ.
Заключение
программа расчет корень уравнение
В ходе написания программы, мною было изучено рисование в окне консоли на языке программирования C++, вывод различного текста и работа с типом данных LPTSTR - указатель на строку с завершающим нулевым символом из 8-разрядных символов Windows (ANSI). Также была написана универсальная процедура, которая выводит график функции на экран. Данная процедура требует минимальных изменений или не требует вообще, при использовании в других расчетах или программах. Она автоматически масштабирует график под размер окна, вне зависимости от его значений. Также обозначается система координат и значения. Нельзя не отметить одну интересную возможность данной процедуры - выделение заданного отрезка другим цветом, его значений и проекции, при необходимости.
Подведя итог, можно сделать вывод, что актуальность данной темы и подобных программ высока, так как всё чаще и чаще приходится сталкиваться с ситуациями, особенно на производстве, когда необходимо выполнить большое количество расчет в короткий срок и с высокой точностью, с чем человек самостоятельно может и не справится, особенно если формулы крайне сложные. Когда компьютер, с правильно заданной программой, может быстро справиться с этой задачей. Также нельзя забывать, что вывод графика и других визуальных представлений решения, может значительно облегчить понимание задачи, что также как я считаю, является достоинством в вопросе о выполнении различных расчетов с помощью компьютера.
Итак, я считаю, что с поставленной задачей я справился, программа удовлетворяет заданным требованиям.
Список использованных источников
1. Гейн А.Г., Сенокосов А.И., Юнерман Н.А. Информатика за 11 класс. Издание: 6-е изд. -- М.: Просвещение, 2005 г.
2. Ядов Г.Б. Информация и общество// Вокруг света. - 2004. - № 2.
3. MSDN - сеть разработчиков Microsoft [Сайт]. URL: https://msdn.microsoft.com/. (19.05.2017).
4. Левитин А. В. Глава 11. Преодоление ограничений: Метод деления пополам // Алгоритмы. Введение в разработку и анализ -- М.: Вильямс, 2006. -- С. 476-480. -- 576 с. -- ISBN 978-5-8459-0987-9.
5. MachineLearning.ru - профессиональный информационно-аналитический ресурс, посвященный машинному обучению, распознаванию образов и интеллектуальному анализу данных [Электронный ресурс]. Метод дихотомии. (Дата публикации: 23 ноября 2008). URL: http://www.machinelearning.ru/wiki/ index.php?title=Методы_дихотомии. (19.05.2017).
Приложение А
Блок-схема программы
Приложение Б
Код программы
#include <conio.h>;
#include <stdlib.h>;
#include <iostream>;
#include <math.h>;
#include <windows.h>;
float MaxABSValue(float arr[], int size) {
float max = abs(arr[0]);
for (int i = 1; i < size; i++) {
if (abs(arr[0]) > max)
max = abs(arr[0]);
}
return max;
}
double f(double x) {
//2x^3-11x^2-17x+115
return 2 * pow(x, 3) - 11 * pow(x, 2) - 17 * x + 115;
}
void DrawGraph(int steps, float *graphY, int zeroX, LPTSTR minX, LPTSTR maxX, int segStart, LPTSTR segStartVal, int segEnd, LPTSTR segEndVal) {
system("cls");
POINT op;
HWND hWnd = GetConsoleWindow();
HDC hDC = GetDC(hWnd);
HPEN graphPen = CreatePen(PS_SOLID, 1, RGB(0, 162, 232));
HPEN segmentPen = CreatePen(PS_SOLID, 1, RGB(237, 28, 36));
HPEN axisPen = CreatePen(PS_SOLID, 1, RGB(195, 195, 195));
HPEN projectionPen = CreatePen(PS_SOLID, 1, RGB(136, 0, 21));
SelectObject(hDC, axisPen);
float substepX = (640 / steps);
float maxY = MaxABSValue(graphY, steps);
MoveToEx(hDC, 0, 150, &op);
LineTo(hDC, 640, 150);
MoveToEx(hDC, zeroX*substepX, 0, &op);
LineTo(hDC, zeroX*substepX, 480);
TextOut(hDC, 632, 151, TEXT("X"), 1);
TextOut(hDC, 0, 151, minX, lstrlen(minX));
for (int i = 0; i < steps - 1; i++) {
int x1 = (i*substepX);
int y1 = -(graphY[i] / maxY) * (150);
int x2 = ((i + 1)*substepX);
int y2 = -(graphY[i + 1] / maxY) * (150);
if (i >= segStart && i <= segEnd)
SelectObject(hDC, segmentPen);
else
SelectObject(hDC, graphPen);
MoveToEx(hDC, x1, 150 + y1, &op);
LineTo(hDC, x2, 150 + y2);
if (i == zeroX) {
TextOut(hDC, (i*substepX) - 8, 151, TEXT("0"), 1);
TextOut(hDC, (i*substepX), 0, TEXT("Y"), 1);
}
if (i == steps - 2)
TextOut(hDC, ((i + 1)*substepX), 151, maxX, lstrlen(maxX));
if (i == segStart) {
if (y1 >= 0)
TextOut(hDC, ((i)*substepX), 134, segStartVal, lstrlen(segStartVal));
else TextOut(hDC, ((i)*substepX), 150, segStartVal, lstrlen(segStartVal));
SelectObject(hDC, projectionPen);
MoveToEx(hDC, x1, 150, &op);
LineTo(hDC, x1, 150 + y1);
}
if (i == segEnd) {
if (y2 >= 0)
TextOut(hDC, ((i + 1)*substepX), 134, segEndVal, lstrlen(segEndVal));
else TextOut(hDC, ((i + 1)*substepX), 150, segEndVal, lstrlen(segEndVal));
SelectObject(hDC, projectionPen);
MoveToEx(hDC, x2, 150, &op);
LineTo(hDC, x2, 150 + y2);
}
}
ReleaseDC(hWnd, hDC);
std::cin.get();
}
void main() {
double a, b, c, e;
setlocale(LC_CTYPE, "rus");
printf_s("Поиск корня уравнения 2x^3-11x^2-17x+115 методом дихотомии - деления пополам, на отрезке от -4 включительно до -2 включительно.\n\n");
printf_s("Нажмите <Enter> чтобы продолжить.");
_getch();
printf_s("\n\nВведите точность вычислений. 0 < e < 1.");
while (true) {
printf_s("\ne = ");
scanf_s("%lf", &e);
if (e > 0 && e < 1)
break;
else
printf_s("\nВведено неверное значение.");
}
a = -4;
b = -2;
while (b - a > e) {
c = (a + b) / 2;
if (f(b) * f(c) < 0)
a = c;
else
b = c;
}
c = (a + b) / 2;
printf_s("\n\nКорень уравнения на данном отрезке равен - %f",c);
printf_s("\n\nНажмите <Enter> чтобы нарисовать график.");
_getch();
float graphY[60];
float substep = 0.25f;
float x = -7.5f;
int zeroX = 0;
int start, end;
for (int i = 0; i < 60; i++) {
double value = x + substep*i;
if (value == -4)
start = i;
if (value == -2)
end = i;
graphY[i] = (float)f(value);
if (value == 0)
zeroX = i;
}
DrawGraph(60, graphY, zeroX, L"-7.5", L"7.5", start, L"-4", end, L"-2");
_getch();
}
Приложение В
Результат работы программы
Рисунок 1 - Окно программы, вывод уравнения, отрезка и метода решения
Рисунок 2 - ввод точности вычислений, проверка, проверка правильности введенного числа
Рисунок 3 - Вывод ответа
Рисунок 4 - Вывод графика на экран
Размещено на Allbest.ru
Подобные документы
Определение корней трансцендентного уравнения. Формулы для расчета координат точек графика. Расчет точного значения корня. Решение задачи линейного программирования с использованием Excel. Алгоритм расчета шлицевого соединения с прямобочными шлицами.
курсовая работа [437,3 K], добавлен 21.03.2016Методика разработки программного модуля для нахождения методом хорд корня уравнения x3-x-0,3=0 с точностью до 0,001 на языке программирования Visual Basic for Application. Схема программного модуля и описание процедуры обработки кнопки "Найти корни".
курсовая работа [394,0 K], добавлен 08.09.2010Применение методов касательных (Ньютона) и комбинированного (хорд и касательных) для определения корня уравнения. Разработка алгоритма решения и его описание его в виде блок-схем. Тексты программ на языке Delphi. тестовый пример и результат его решения.
курсовая работа [923,7 K], добавлен 15.06.2013Изучение численных методов решения нелинейных уравнений, используемых в прикладных задачах. Нахождение корня уравнения методом простой итерации и методом касательных (на примере уравнения). Отделение корней графически. Программная реализация, алгоритм.
курсовая работа [1,7 M], добавлен 15.06.2013Тестирование модуля отыскания корня уравнения методом половинного деления. Схема алгоритма тестирующей программы. Численное интегрирование по методу Симпсона с оценкой погрешности по правилу Рунге. Проверка условий сходимости методов с помощью MathCAD.
курсовая работа [1,1 M], добавлен 04.02.2011Составление блок-схемы и алгоритма программы для решения уравнения с приближенным значением корня по методу Ньютона, расчета приближенного значения интеграла по формуле трапеций, вычисления уравнения длины вектора. Типы формул общего члена суммы.
курсовая работа [41,3 K], добавлен 15.12.2012Особенности точных и итерационных методов решения нелинейных уравнений. Последовательность процесса нахождения корня уравнения. Разработка программы для проверки решения нелинейных функций с помощью метода дихотомии (половинного деления) и метода хорд.
курсовая работа [539,2 K], добавлен 15.06.2013Рассмотрение двух методов нахождения приближенного корня дифференциального уравнения, применение их на практике. Графическая интерпретация метода Эйлера. Решение задачи усовершенствованным методом Эйлера. Программная реализация, блок-схемы и алгоритм.
курсовая работа [246,8 K], добавлен 17.06.2013Обзор методов вычисления кубического корня: численные, метод интеграций и другие. Оценка их преимуществ и недостатков Математическое представление задачи вычисления значений кубического корня, описание системы реализации. Примеры работы программы.
курсовая работа [486,3 K], добавлен 14.12.2012Проверить условие сходимости и записать расчетные формулы для нахождения корня уравнения. Составить блок-схему алгоритма, программу решения задачи. Вычисления определенного интеграла методом Симпсона. Построить график функции Y=1/sqr(3sin(x)+2cos(x)).
курсовая работа [29,6 K], добавлен 02.10.2008