Другие языки программирования и технологии

Метод половинного деления

Помогите написать программу на языке С++ под номером 2, целый день ломаю голову
Kombrig8670
Kombrig8670
213
Тут надо корни разделять, которых - верно - может быть на конечном отрезке хоть бесконечное количество, но это вообще никакая не дихотомия, а то что называется "где хочешь там и бери " ! И на практике так всегда и поступают - создают некую поисковую активность и что-то там себе находят, чтобы потом проверить, но это всё, вообще-то, не очень строго.

А сама дихотомия работает? После разделения корней, то есть на начальном отрезке с одним единственным корнем, что доподлинно известно? Я проверял этот метод на уравнениях cosX = X и

lnX = 1/X. Работоспособность и безотказность хорошие, а вот эффективность оставляет желать лучшего: метод Ньютона работает быстрее на порядок, то есть если по методу Ньютона корень находится за несколько итераций, то по методу дихотомии - за несколько десятков! А вот мой тестировочный код:

#include "iostream"

#include "cmath"

using namespace std;

double y(double x) { return log(x)-1/x; }

int main() { double a,b,c,eps,yc; int i; cout.precision(16); for (;;) { cout << "a b eps > "; cin >> a >> b >> eps; for (i=1; i < 10000; i++) { c=(a+b)/2; yc=y(c); if (abs(yc) <= eps) break; else { cout << i <<

' ' << c << '\n'; if (y(a)*yc < 0) b=c; else if (y(b)*yc < 0) a=c; } } cout << i << " iteration, x = " << c << '\n'; } }

Понятное дело, что эту пресловутую дихотомию лучше вынести в отдельную функцию, а вовсе не в главную, а ещё лучше вообще с этой дихотомией не связываться: ну её в баню, она ж малоэффективна !..
ЕА
Евгений Александрович
28 648
Лучший ответ
Берёшь половину и делишь
Серега Симоненко Ну или берёшь пол и делишь
Щас бы посрать
Dilshod Gulov
Dilshod Gulov
115