Найти решение уравнения - C (СИ)
Формулировка задачи:
Нужно найти решение уравнения: 2 * x - ln(x) - 5 = 0 на отрезке [2;4] с точностью до 7 знака,методом деления пополам.Моя программа выдает результат чуть больше 2.7,но по графику видно,что решение чуть больше 3.Где она ошибается понять не могу,нужна помощь знатоков.
#include<stdio.h> #include<math.h> int F(double x) { double F; int flag = 0; F = 2 * x - log10(x) - 5; if (F < 0) flag = 1; else flag = 0; return flag; } int main(void) { double A = 2.0, B = 4.0, x0; int c, a, b; x0 = (A + B) / 2; while ((x0 - A) >= 1e-7) { c = F(x0); a = F(A); b = F(B); if (c == a) A = x0; else B = x0; x0 = (A + B) / 2; } printf("x0=%.7f\n", x0); system("PAUSE"); return 0; }
Решение задачи: «Найти решение уравнения»
textual
Листинг программы
double F(double x) { return 2 * x - log(x) - 5; } int main() { double a = 2.0, b = 4.0, c; c = (a + b) / 2; while (abs(b - a) >= 1e-7) { if (F(c) * F(a) > 0) a = c; else b = c; c = (a + b) / 2; } printf("x=%.7f\n", c); printf("fx=%.10f\n", F(c)); system("PAUSE"); return 0; }
Объяснение кода листинга программы
- В функции
F(double x)
происходит вычисление значения функции2*x - log(x) - 5
. - В функции
main()
инициализируются переменныеa=2.0
,b=4.0
иc=(a+b)/2
. - Задаётся условие цикла
while
, которое проверяет, что разница междуa
иb
больше 1e-7. - В цикле выполняется проверка: если произведение значений функции
F(c)
иF(a)
положительно, то значение переменнойa
присваивается значениеc
. - Если условие в предыдущем шаге не выполняется, то значение переменной
b
присваивается значениеc
. - Значение переменной
c
обновляется как среднее арифметическоеa
иb
. - Цикл выполняется до тех пор, пока условие не будет выполнено.
- После выполнения цикла выводится значение переменной
c
и значение функцииF(c)
. - В конце программы выводится сообщение
PAUSE
и возвращается 0.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д