Леонид: Спасибо
20-09-2023
Читать статью
Калужский Александр: Леонид, цикл x повториться 300 раз, цикл..
Леонид: Почему k == 90000 в примере (x > A) ∨ (y..
Привет! Сегодня посмотрим, как решать уравнения методом дихотомии (методом половинного деления) на языке программирования C#.
Другие методы решения уравнений на компьютере можете посмотреть в этом разделе.
Пусть есть уравнение f(x)=0. Найдём приближенно корень этого уравнения на отрезке [a, b] с погрешностью ε. В данном диапазоне корень должен быть только один.
Значения f(a) и f(b) должны иметь разные знаки.
Функция 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] в два раза и повторяем предыдущие действия.
В программе применяется цикл WHILE. Пока длина отрезка не удовлетворяет заданной точности, продолжаем уменьшать отрезок поиска.
Функция Math.Pow() используется для возведения в степень переменную типа double.
Метод дихотомии (методом половинного деления) является очень эффективным способом решения уравнений.
Через n повторений длина отрезка будет равна (b-a)/2n. Таким образом, мы можем точно вычислить через сколько итераций получим приближённый корень с заданной точностью.
В нашей программе метод дихотомии получил следующий результат.
На сегодня всё, удачи!