Нахождение корней нелинейных уравнений методом деления отрезка пополам

Заказать уникальную курсовую работу
Тип работы: Курсовая работа
Предмет: Программирование
  • 30 30 страниц
  • 7 + 7 источников
  • Добавлена 06.07.2023
1 000 руб.
  • Содержание
  • Часть работы
  • Список литературы
Введение 2
Математическое обоснование метода 4
Нелинейные уравнения 5
Метода деления отрезка пополам 6
Подробное описание шагов алгоритма 11
Модификации алгоритма 12
Математическое обоснование метода 14
Доказательство сходимости алгоритма 15
Условие сходимости алгоритма 16
Программная реализация метода 18
Язык программирования C# 18
Разработка графического интерфейса 19
Описание основных методов 20
Результаты работы программы 25
Заключение 28
Список литературы 30

Фрагмент для ознакомления

C# поддерживает множество функциональных возможностей, таких как обработка исключений, работа с файлами, базами данных и сетью, многопоточность и другие. Это позволяет разработчикам создавать мощные и сложные приложения, включая системы управления базами данных, игры, инструменты анализа данных и другие.Windows Forms также обладает возможностью масштабирования, что позволяет разрабатывать приложения различного уровня сложности. Вы можете создавать простые приложения с несколькими окнами и элементами управления, а также сложные приложения с несколькими формами и сложной логикой.Разработка графического интерфейсаДля создания графического интерфейса была использована среда разработки VisualStudio. В полях ввода мы получаем от пользователя границы отрезка , точность вычисления , максимальное количество итераций и целевую функцию. После нажатия кнопки «Calculate» корень уравнения будет выведен в поле «Result». Окно графического интерфейсапредставлено на рисунке 1. После добавления всех элементов управления VisualStudioавтоматический генерирует .csфайл, где добавляются все указанные поля ввода и кнопки (рисунок 2).Рисунок 1. Графический интерфейс приложения.Рисунок 2. Создание графического интерфейса в VisualStudio.Описание основных методовМетод Function предназначен для вычисления значения функции на основе заданного аргумента x и текстового представления функции functionText. Рассмотрим работу метода подробнее:Создание объекта NCalc.Expression:NCalc.Expression expression = new NCalc.Expression(functionText); - создает новый экземпляр класса NCalc.Expression, который представляет математическое выражение, заданное в переменной functionText.Назначение значения параметра x:expression.Parameters["x"] = x; - задает значение параметра x в математическом выражении, используя переданное значение x. Таким образом, мы связываем переменную x в выражении с фактическим значением, которое будет использоваться при вычислении выражения.Вычисление значения выражения:(double)expression.Evaluate(); - вызывает метод Evaluate() объекта expression, который вычисляет значение математического выражения, учитывая заданные значения параметров. Затем результат вычисления приводится к типу double и возвращается как результат выполнения метода Function.Таким образом, данный метод использует библиотеку NCalc для анализа и вычисления математического выражения, заданного в виде строки functionText. Он создает объект NCalc.Expression, назначает значение аргумента x и вычисляет значение выражения с помощью метода Evaluate(), возвращая результат в виде значения типа double.Метод Bisection реализует алгоритм деления отрезка пополам для нахождения корней нелинейных уравнений. Рассмотрим подробно его работу:Проверка корректности интервала:if (Function(a, functionText) * Function(b, functionText) >= 0) - проверяет знаки функции на концах интервала [a, b]. Если оба значения имеют одинаковые знаки или равны нулю, выбрасывается исключение ArgumentException с сообщением о невалидности интервала. Это связано с требованием наличия разных знаков функции на концах интервала для применения метода деления отрезка пополам.Инициализация переменной c:double c = a; - инициализирует переменную c значением a. Переменная c представляет середину текущего интервала.Цикл деления отрезка пополам:for (int i = 0; i < maxIterations; i++) - запускает цикл деления отрезка пополам с максимальным количеством итераций, определенным переменной maxIterations.Вычисление середины отрезка:c = (a + b) / 2; - вычисляет середину текущего интервала, путем нахождения среднего значения между a и b.Проверка условия остановки:if (Math.Abs(Function(c, functionText)) < epsilon || (b - a) / 2 < epsilon) - проверяет два условия для остановки итераций. Если модуль значения функции в точке c меньше заданной погрешности epsilon или половина текущего интервала (b - a) / 2 меньше epsilon, цикл прерывается.Обновление интервала:if (Function(c, functionText) * Function(a, functionText) < 0) - проверяет знак функции в точке c относительно знака функции в точке a. Если знаки функции разные, то корень находится в левой половине интервала, и переменная b обновляется значением c.else - если знаки функции одинаковые, то корень находится в правой половине интервала, и переменная a обновляется значением c.Возврат найденного значения корня:return c; - возвращает найденное значение корня после окончания цикла.Таким образом, данный метод выполняет итеративное деление отрезка пополам до достижения требуемой точности epsilon или максимального числа итераций maxIterations. Он проверяет условия остановки и обновляет интервал, пока не будет найден приближенный корень уравнения. В конце метод возвращает найденное значение корня.После нажатия кнопки «Calculate» программа вызывает метод btnCalculate_Click.Он выполняет следующие:Извлечение значений из текстовых полей:double a = double.Parse(txtA.Text); - извлекает значение из текстового поля txtA и преобразует его в тип double, сохраняя результат в переменную a.double b = double.Parse(txtB.Text); - извлекает значение из текстового поля txtB и преобразует его в тип double, сохраняя результат в переменную b.double epsilon = double.Parse(txtEpsilon.Text); - извлекает значение из текстового поля txtEpsilon и преобразует его в тип double, сохраняя результат в переменную epsilon.int maxIterations = int.Parse(txtMaxIterations.Text); - извлекает значение из текстового поля txtMaxIterations и преобразует его в тип int, сохраняя результат в переменную maxIterations.string functionText = txtFunction.Text; - извлекает текст из текстового поля txtFunction и сохраняет его в переменную functionText.Вызов функции Bisection с передачей извлеченных значений:double result = Bisection(a, b, epsilon, maxIterations, functionText); - вызывает функцию Bisection с передачей значений a, b, epsilon, maxIterations и functionText в качестве аргументов. Результат выполнения функции сохраняется в переменной result.Отображение результата в текстовом поле:txtResult.Text = result.ToString(); - преобразует значение переменной result в строку и присваивает его свойству Text текстового поля txtResult. Это приводит к отображению результата вычислений в текстовом поле.Таким образом, данный метод извлекает значения из текстовых полей, вызывает функцию Bisection с передачей этих значений, а затем отображает результат вычислений в текстовом поле txtResult.Результаты работы программыНа рисунках 3-7 представлены примеры работы разработанного приложения для разных целевых функций и интервалов. Во всех случаях программа выдает верные результаты с заданной точностью.Рисунок 3. Пример работы программы.Рисунок 4. Пример работы программы.Рисунок 5. Пример работы программы.Рисунок 6. Пример работы программы.Рисунок 7. Пример работы программы.ЗаключениеМы рассмотрели метод деления отрезка пополам для нахождения корней нелинейных уравнений. Метод деления отрезка пополам является простым и эффективным численным методом, который позволяет найти корень уравнения с высокой точностью.Мы начали с введения, где описали значимость нелинейных уравнений в различных областях науки и техники. После этого мы подробно описали метод деления отрезка пополам и его основные принципы. Метод деления отрезка пополам основан на идее последовательного деления интервала на половины и проверки знаков функции на концах интервала.Затем мы рассмотрели преимущества и ограничения данного метода. Преимуществами метода деления отрезка пополам являются его простота реализации, гарантированная сходимость при выполнении определенных условий, а также возможность нахождения корней с заданной точностью. Однако метод может потребовать большое количество итераций, особенно в случаях, когда корень находится близко к границе интервала или функция имеет сложную структуру.Мы также представили алгоритм метода деления отрезка пополам, описав подробно каждый из его шагов. Алгоритм начинается с проверки валидности интервала и затем выполняет итерации деления отрезка пополам до достижения условий остановки.Математическое обоснование метода было представлено в отдельной главе. Мы доказали сходимость метода и оценили скорость сходимости. Условия сходимости были также рассмотрены, и было показано, что для успешной работы метода необходимо выполнение определенных условий, включая наличие разных знаков функции на концах интервала.В завершении работы мы предоставили программную реализацию метода на языке C# с использованием Windows Forms. Описали создание графического интерфейса, элементы управления и взаимодействие с ними. Также были рассмотрены возможности расширения метода для улучшения точности и эффективности.В целом, метод деления отрезка пополам представляет собой мощный инструмент для нахождения корней нелинейных уравнений. Он широко применяется в различных областях науки и техники, где требуется численное решение уравнений. Понимание и умение использовать этот метод позволяет решать разнообразные задачи, связанные с анализом и моделированием.Несмотря на свою простоту, метод деления отрезка пополам остается актуальным и полезным инструментом в численных вычислениях. Однако следует помнить о его ограничениях и выбирать подходящий метод в зависимости от конкретной задачи.В дальнейшем исследовании можно рассмотреть другие численные методы для нахождения корней нелинейных уравнений, сравнить их эффективность и точность с методом деления отрезка пополам. Это позволит расширить наши знания в области численных методов и выбрать наиболее подходящий метод для конкретной задачи.В целом, изучение метода деления отрезка пополам представляет собой важный этап в изучении численных методов и развитии навыков численного анализа. Этот метод позволяет нам решать сложные математические задачи, которые не всегда могут быть решены аналитически.Список литературыБалдин К.В., Башлыков В.Н., Рукосуев А.В. Методы оптимальных решений. Под общ .ред. Балдина К.В. 4-е изд. М.: ФЛИНТА. 2015. 328 с. Бахвалов Н.С., Жидков Н.П., Кобельков Г.М. Численные методы. М. Бином. Лаборатория знаний. 2015. 640 с.Подбельский В.В. Язык С#. Базовый курс. М.: Финансы и статистика, 2011.384 с. Голицына О.Л., Попов И.И. Основы алгоритмизации и программирования. Учебное пособие. М.: Форум, Инфра-М. 2015. 432 с.Кнут Д. Искусство программирования. Том 2. Получисленные алгоритмы. М.: Вильямс. 2017. 832 с. Павловская Т.А. С/С# Программирование на языке высокого уровня. Учебник для вузов. СПб.: Питер. 2013. 432 с. Трофимов В.В., Павловская Т.А. Алгоритмизация и программирование. Учебник для академического бакалавриата. М.: Издательство Юрайт. 2018. 137 с.

1. Балдин К.В., Башлыков В.Н., Рукосуев А.В. Методы оптимальных решений. Под общ .ред. Балдина К.В. 4-е изд. М.: ФЛИНТА. 2015. 328 с.
2. Бахвалов Н.С., Жидков Н.П., Кобельков Г.М. Численные методы. М. Бином. Лаборатория знаний. 2015. 640 с.
3. Подбельский В.В. Язык С#. Базовый курс. М.: Финансы и статистика, 2011.384 с.
4. Голицына О.Л., Попов И.И. Основы алгоритмизации и программирования. Учебное пособие. М.: Форум, Инфра-М. 2015. 432 с.
5. Кнут Д. Искусство программирования. Том 2. Получисленные алгоритмы. М.: Вильямс. 2017. 832 с.
6. Павловская Т.А. С/С# Программирование на языке высокого уровня. Учебник для вузов. СПб.: Питер. 2013. 432 с.
7. Трофимов В.В., Павловская Т.А. Алгоритмизация и программирование. Учебник для академического бакалавриата. М.: Издательство Юрайт. 2018. 137 с.