Метод деления пополам, оценка точности по оси ординат
Нужно найти корень уравнения по методу деления пополам с точностью до 1e-6 и найти погрешность метода по оси ординат
#include <stdio.h>
#include <math.h>
int main(void){
double eps=1e-6;
double l = 0, r = 1;
double m;
double iterations = 0;
while ((r - l) > eps){
double m = (l + r)/2;
double func_left = atan(l) - 0.75;
double func_middle = atan(m) - 0.75;
if ((func_left * func_middle) < 0 ){
r = m;
}
else{
l = m;
}
iterations++;
}
iterations--;
m = (l + r)/2;
double L = fabs(r - l);
double x_left = m - (L/pow(2, iterations)), x_right = m + (L/pow(2, iterations));
double y_left = atan(x_left) - 0.75, y_right = (atan(x_right) - 0.75);
double ef = fabs(y_left - y_right);
printf("%.6lf\n", m);
printf("%.8lf\n", ef);
return0;
}
В указаниях к работе сказано, что вычисляется погрешность по оси ординат следующим образом, но мой код выдает неверный ответ, подскажите, пожалуйста, что я делаю не так

Ответы (1 шт):
Автор решения: MBo
→ Ссылка
Вы ищете решение, обеспечивая как раз нужную точность по оси абсцисс, т.к. сравниваете (r - l) > eps.
А для достижения eps по оси ординат нужно сравнивать eps c abs(func_left-func_middle) - такое будет условие остановки цикла.
И когда остановились, то погрешность по иксу m-l, что эквивалентно начальному интервалу L=(r0-l0), деленному на двойку в степени количества итераций.