Вычисление корней нелинейного уравнения методом дихотомии - C (СИ)
Формулировка задачи:
Задание. Определить корни уравнения x^2 - e^(-x^2) = 0
#include <stdio.h>
#include <time.h>
#include <math.h>
main()
{
const double eps = 0.00001;
const double exp = 2.7182818284590452;
double a, b, m, f1, f2, f3;
a = 0.5;
b = 0.9;
f1 = a * a - pow (exp, -a*a);
f2 = b * b - pow (exp, -b*b);
m = 0;
while (f1*f2 < 0 && abs(f1 - f2 > eps))
{
m = (a + b) / 2;
f3 = m * m - pow(exp, -m*m);
if (f1*f3 < 0)
{
b = m;
f2 = m * m - pow (exp, -m*m);
}
else
{
a = m;
f1 = m * m - pow (exp, -m*m);
}
}
printf("%lf", m);
}Спасибо!
Решение задачи: «Вычисление корней нелинейного уравнения методом дихотомии»
textual
Листинг программы
while (f1*f2 < 0 && abs(a-b) > eps)
Объяснение кода листинга программы
- Начинается цикл while, который выполняется до тех пор, пока произведение f1 и f2 меньше нуля и разница между a и b больше eps.
- В первой части условия проверяется, что произведение f1 и f2 меньше нуля.
- Во второй части условия проверяется, что разница между a и b больше eps.
- Если условие выполняется, то происходит деление отрезка [a, b] пополам и присваивание полученных корней переменным f1 и f2.
- Если условие не выполняется, то происходит выход из цикла и присваивание значения переменной f1 корню уравнения.