Как должен выглядеть алгоритм для метода половинного деления на языке программирования?

Алгоритм метода половинного деления:

Вводим отрезок [a,b]

Вводим eps (достаточно маленькая величина)

Вычисляем f(a) и f(b)

Цикл пока abs(a-b)>eps

c=(a+b)/2

Если f(a)f(b)<0

b=c

f(b)=f(c)

Иначе

a=c

f(a)=f(c)

Всеесли

Всецикл

x=c

Вывод х

А как он будет выглядеть на языке программирования в максимально коротком виде?
Любой язык, интересует возможность уменьшения количества кода при сохранении его работоспособности.
  • Вопрос задан
  • 763 просмотра
Пригласить эксперта
Ответы на вопрос 1
vabka
@vabka
Токсичный шарпист
Не уверен, на каком языке вы хотите, по тому опишу на F#
open System

let epsilon = Double.Epsilon
let abs: float -> float = Math.Abs
let equals a b = abs (a - b) <= epsilon

let rec findRoot f segment =
    let bisect f (a, b) =
        let avg = (a + b) / 2.0
        if ((f a) * (f b)) < 0.0 then // знак f(a) != знак f(b)
            a, avg
        else
            avg, b

    let a, b = bisect f segment
    if equals a b then a else findZero f (a, b)

let segment = -10.0, 10.0 // Отрезок [-10,10]
let f x = x + 5.0 // Пусть f(x) = x + 5
let result = findRoot f segment
printfn "%f" result


Или ещё короче на Wolfram language
ResourceFunction["BisectionMethodFindRoot"][x + 5, {x, -10, 10}, 5, 100]

https://resources.wolframcloud.com/FunctionReposit...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы