Решение нелинейного уравнения методом деления отрезка пополам (цикл While) - C (СИ)
Формулировка задачи:
Обчислить уровнение способом деления отрезка пополам используя цыкл While.
Дана точность ε<0,004. Отрезок xϵ[a;b] вводить с клавиатуры.
Решение задачи: «Решение нелинейного уравнения методом деления отрезка пополам (цикл While)»
textual
Листинг программы
#include <stdio.h>
#include <math.h>
double equation(double x)
{
return (exp(-2*x)-x+1);
}
int main()
{
double e = 0.004;
float a,b,c,x;
printf("Insert left side of range a=");
scanf("%f",&a);
printf("Insert right side of range b=");
scanf("%f",&b);
while(fabs(b-a)>e)
{
c = (a+b)/2;
if (equation(a)*equation(c) < 0)
b = c;
else a = c;
printf("x=[%f..%f]\n",a,b);
}
}
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с математическими функциями и вводом/выводом данных.
- Определение функции
equation(double x), которая выражает нелинейное уравнение. - Ввод значений переменных
aиbс помощью функцииscanf(). Переменнаяaобозначает левую границу интервала, а переменнаяb- правую границу интервала, в котором ищется решение уравнения. - Организация цикла
while, который будет выполняться до тех пор, пока разница междуbиaбольше заданной точностиe. - Вычисление промежуточной точки
c, которая является серединным значением интервалаaиb. - Проверка значения функции
equation(a)иequation(c). Если они имеют разные знаки, то значение переменнойbприсваивается значениеc, иначе значение переменнойaприсваивается значениеc. - Вывод интервала, в котором находится решение уравнения.
- После выполнения цикла
whileи достижения заданной точностиe, программа завершается.