#include <stdio.h>
#include <math.h>
// Функция f(x) = 2x - 3*ln(x) - 3
double f(double x) {
return 2 * x
- 3 * log(x
) - 3; }
// Метод половинного деления
double bisection(double a, double b, double epsilon, int max_iterations) {
double c, fa, fc;
int iteration = 0;
printf("Итерация | x | f(x) \n"); printf("---------|-------------|------------\n");
// Проверка смены знака на концах интервала
if (f(a) * f(b) >= 0) {
printf("На интервале [%.2f, %.2f] функция не меняет знак. Метод не применим.\n", a
, b
); return NAN;
}
do {
c = (a + b) / 2.0; // Середина интервала
fa = f(a);
fc = f(c);
// Вывод текущей итерации
printf("%8d | %11.8f | %11.8f\n", iteration
+ 1, c
, fc
);
// Выбор подынтервала для следующей итерации
if (fa * fc < 0) {
b = c; // Корень находится в [a, c]
} else {
a = c; // Корень находится в [c, b]
}
iteration++;
} while (fabs(b
- a
) > epsilon
&& iteration
< max_iterations
);
return (a + b) / 2.0; // Приближённое значение корня
}
int main() {
double a = 0.5; // Левая граница интервала
double b = 0.6; // Правая граница интервала
double epsilon = 1e-4; // Точность
int max_iterations = 100; // Максимальное число итераций
printf("Решение уравнения: 2x - 3*ln(x) - 3 = 0\n"); printf("Интервал: [%.2f, %.2f]\n", a
, b
); printf("Точность: %.0e\n\n", epsilon
);
double root = bisection(a, b, epsilon, max_iterations);
if (!isnan(root)) {
printf("Приближённый корень: %.8f\n", root
); printf("Значение f(корень): %.8f\n", f
(root
)); printf("Достигнутая точность: %.8f\n", fabs(b
- a
)); }
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+CgovLyDQpNGD0L3QutGG0LjRjyBmKHgpID0gMnggLSAzKmxuKHgpIC0gMwpkb3VibGUgZihkb3VibGUgeCkgewogICAgcmV0dXJuIDIgKiB4IC0gMyAqIGxvZyh4KSAtIDM7Cn0KCi8vINCc0LXRgtC+0LQg0L/QvtC70L7QstC40L3QvdC+0LPQviDQtNC10LvQtdC90LjRjwpkb3VibGUgYmlzZWN0aW9uKGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGVwc2lsb24sIGludCBtYXhfaXRlcmF0aW9ucykgewogICAgZG91YmxlIGMsIGZhLCBmYzsKICAgIGludCBpdGVyYXRpb24gPSAwOwogICAgCiAgICBwcmludGYoItCY0YLQtdGA0LDRhtC40Y8gfCAgICAgIHggICAgICB8ICAgIGYoeCkgICAgXG4iKTsKICAgIHByaW50ZigiLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tXG4iKTsKCiAgICAvLyDQn9GA0L7QstC10YDQutCwINGB0LzQtdC90Ysg0LfQvdCw0LrQsCDQvdCwINC60L7QvdGG0LDRhSDQuNC90YLQtdGA0LLQsNC70LAKICAgIGlmIChmKGEpICogZihiKSA+PSAwKSB7CiAgICAgICAgcHJpbnRmKCLQndCwINC40L3RgtC10YDQstCw0LvQtSBbJS4yZiwgJS4yZl0g0YTRg9C90LrRhtC40Y8g0L3QtSDQvNC10L3Rj9C10YIg0LfQvdCw0LouINCc0LXRgtC+0LQg0L3QtSDQv9GA0LjQvNC10L3QuNC8LlxuIiwgYSwgYik7CiAgICAgICAgcmV0dXJuIE5BTjsKICAgIH0KCiAgICBkbyB7CiAgICAgICAgYyA9IChhICsgYikgLyAyLjA7IC8vINCh0LXRgNC10LTQuNC90LAg0LjQvdGC0LXRgNCy0LDQu9CwCiAgICAgICAgZmEgPSBmKGEpOwogICAgICAgIGZjID0gZihjKTsKICAgICAgICAKICAgICAgICAvLyDQktGL0LLQvtC0INGC0LXQutGD0YnQtdC5INC40YLQtdGA0LDRhtC40LgKICAgICAgICBwcmludGYoIiU4ZCB8ICUxMS44ZiB8ICUxMS44ZlxuIiwgaXRlcmF0aW9uICsgMSwgYywgZmMpOwoKICAgICAgICAvLyDQktGL0LHQvtGAINC/0L7QtNGL0L3RgtC10YDQstCw0LvQsCDQtNC70Y8g0YHQu9C10LTRg9GO0YnQtdC5INC40YLQtdGA0LDRhtC40LgKICAgICAgICBpZiAoZmEgKiBmYyA8IDApIHsKICAgICAgICAgICAgYiA9IGM7IC8vINCa0L7RgNC10L3RjCDQvdCw0YXQvtC00LjRgtGB0Y8g0LIgW2EsIGNdCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYSA9IGM7IC8vINCa0L7RgNC10L3RjCDQvdCw0YXQvtC00LjRgtGB0Y8g0LIgW2MsIGJdCiAgICAgICAgfQoKICAgICAgICBpdGVyYXRpb24rKzsKICAgIH0gd2hpbGUgKGZhYnMoYiAtIGEpID4gZXBzaWxvbiAmJiBpdGVyYXRpb24gPCBtYXhfaXRlcmF0aW9ucyk7CgogICAgcmV0dXJuIChhICsgYikgLyAyLjA7IC8vINCf0YDQuNCx0LvQuNC20ZHQvdC90L7QtSDQt9C90LDRh9C10L3QuNC1INC60L7RgNC90Y8KfQoKaW50IG1haW4oKSB7CiAgICBkb3VibGUgYSA9IDAuNTsgICAgICAgICAvLyDQm9C10LLQsNGPINCz0YDQsNC90LjRhtCwINC40L3RgtC10YDQstCw0LvQsAogICAgZG91YmxlIGIgPSAwLjY7ICAgICAgICAgLy8g0J/RgNCw0LLQsNGPINCz0YDQsNC90LjRhtCwINC40L3RgtC10YDQstCw0LvQsAogICAgZG91YmxlIGVwc2lsb24gPSAxZS00OyAgLy8g0KLQvtGH0L3QvtGB0YLRjAogICAgaW50IG1heF9pdGVyYXRpb25zID0gMTAwOyAvLyDQnNCw0LrRgdC40LzQsNC70YzQvdC+0LUg0YfQuNGB0LvQviDQuNGC0LXRgNCw0YbQuNC5CgogICAgcHJpbnRmKCLQoNC10YjQtdC90LjQtSDRg9GA0LDQstC90LXQvdC40Y86IDJ4IC0gMypsbih4KSAtIDMgPSAwXG4iKTsKICAgIHByaW50Zigi0JjQvdGC0LXRgNCy0LDQuzogWyUuMmYsICUuMmZdXG4iLCBhLCBiKTsKICAgIHByaW50Zigi0KLQvtGH0L3QvtGB0YLRjDogJS4wZVxuXG4iLCBlcHNpbG9uKTsKCiAgICBkb3VibGUgcm9vdCA9IGJpc2VjdGlvbihhLCBiLCBlcHNpbG9uLCBtYXhfaXRlcmF0aW9ucyk7CgogICAgaWYgKCFpc25hbihyb290KSkgewogICAgICAgIHByaW50ZigiXG5cbtCg0LXQt9GD0LvRjNGC0LDRgjpcbiIpOwogICAgICAgIHByaW50Zigi0J/RgNC40LHQu9C40LbRkdC90L3Ri9C5INC60L7RgNC10L3RjDogJS44ZlxuIiwgcm9vdCk7CiAgICAgICAgcHJpbnRmKCLQl9C90LDRh9C10L3QuNC1IGYo0LrQvtGA0LXQvdGMKTogJS44ZlxuIiwgZihyb290KSk7CiAgICAgICAgcHJpbnRmKCLQlNC+0YHRgtC40LPQvdGD0YLQsNGPINGC0L7Rh9C90L7RgdGC0Yw6ICUuOGZcbiIsIGZhYnMoYiAtIGEpKTsKICAgIH0KCiAgICByZXR1cm4gMDsKfQ==