вентилятор
Хорошего настроения!

Решение уравнений (метод дихотомии) на C#



Привет! Сегодня посмотрим, как решать уравнения методом дихотомии (методом половинного деления) на языке программирования C#.


Другие методы решения уравнений на компьютере можете посмотреть в этом разделе.


Пусть есть уравнение f(x)=0. Найдём приближенно корень этого уравнения на отрезке [a, b] с погрешностью ε. В данном диапазоне корень должен быть только один.


Значения f(a) и f(b) должны иметь разные знаки.


f(a)*f(b) < 0

Функция f(x) должна быть непрерывной на интервале [a, b].


Мы точно знаем, что корень находится на отрезке [a, b]. Можем написать, что решение уравнения будет равно середине отрезка с=(a+b)/2 с погрешностью ε=(b-a)/2, где ε - половина отрезка. Т.е. x=c ± ε.


Напишем программу на C# для решения уравнения x2=2 методом дихотомии на отрезке [0, 2] с точностью ε=0.00000001.


Перенесём 2 (двойку) в левую часть уравнения, тогда получим f(x) = x2 - 2 = 0.



Запрограммируем консольное приложение.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp13
{
    internal class Program
    {
        static void Main(string[] args)
        {
            double e = 0.00000001;
            
            double a = 0;
            double b = 2;

            double c = (a + b) / 2;

            while(b - a >= 2*e)
            {
                if((Math.Pow(a, 2) - 2) * (Math.Pow(c, 2) - 2) < 0)
                {
                    b = c;
                }
                else
                {
                    a = c;
                }

                c = (a + b) / 2;
            }

            Console.WriteLine("{0:0.00000000}", c);

        }
    }
}


Переменная e - это погрешность, с которой хотим вычислить корень уравнения. Переменные a, b - левая и правая граница отрезка, где ищем ответ. Переменная c - это середина отрезка [a, b].


Длина отрезка должна подходить под заданную точность ε=(b-a)/2 < e , т.е. b-a < 2*e. Тогда c и будет приближённым решением.


В том случае, когда вычисленное значение c оказалось далеко от корня в пределах желаемой точности e, уменьшаем отрезок поиска [a, b] в два раза и повторяем предыдущие действия.


Если f(a)*f(c) < 0, то корень находится на отрезке [a, c], иначе на отрезке [c, b].

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



Функция Math.Pow() используется для возведения в степень переменную типа double.


Метод дихотомии (методом половинного деления) является очень эффективным способом решения уравнений.


Через n повторений длина отрезка будет равна (b-a)/2n. Таким образом, мы можем точно вычислить через сколько итераций получим приближённый корень с заданной точностью.


В нашей программе метод дихотомии получил следующий результат.


Результат работы метода дихотомии

На сегодня всё, удачи!






12-11-2022 в 13:56:03





Поддержать сайт:


Похожая статья:

Шейкер-сортировка на C#

Привет, Друзья! Сегодня разберём алгоритм сортировки "метод встряхиван...

Категория: Алгоритмы  Подкатегория: Сортировка
Дата: 25-01-2018 в 17:19:58 0



Оставить коментарий:



Напишите email, чтобы получать сообщения о новых комментариях (необязательно):


Задача против робота. Расположите картинки горизонтально:




Нажимая кнопку Отправить, Вы соглашаетесь с политикой конфиденциальности сайта.