Нужно найти корни уравнения с помощью метода дихотомий.
Есть простой код (да и в инете много примеров). Хочу автоматизировать код, чтобы не писать каждый раз одно и то же, когда корней много (в моём случае 5; программа для случая с 3 корнями). В C++ новичок. Прошу помощи
double f21(double x, double N)
{
return 0.2 * (x + 2) + sqrt(N) * sin(x) + (4 * sin(3 * x)) / 3; // функция для расчётов (тут 5 корней)
}
void funck2()//решение задачи 2
{
//С помощью первой задачи мы получили текстовый файл, который можно посмотреть
//и проанализировать по полученным точкам поведение нашей функции, чтобы примерно представить
//где будут находиться наши корни, воспользуемся этими знаниями для решения задачи 2:
cout << "Task 2. We need to find all the roots of the function f(x) with a given step:\n\n";
double x = a;//начальное положение точки Х
double epsilon = 0;
double eps = 0.0001;
double c, d;//точки, близлежащие к f(x) = 0, относительно которых мы найдем корни функции
while (f21(x, n) < 0) x += h;//находим ближайшую точку Х к оси ОХ, но при которой f(x) < 0
c = x - h;
cout << "f(" << c << ")= " << f21(c, n) << "\n";
d = x + h;
cout << "f(" << d << ")= " << f21(d, n) << "\n";//точки c и d это те точки, близкие к нулю, при которых f(c)*f(d) < 0
while (((d - c) >= eps) | (f21(epsilon, n) >= eps))//цикл поиска корней методом дихотомии
{
epsilon = (c + d) / 2;//деление отрезка на пополам
if (f21(c, n) * f21(epsilon, n) < 0) d = epsilon;//3 условия для нахождения корня
if (f21(c, n) * f21(epsilon, n) > 0) c = epsilon;
if (f21(epsilon, n) == 0) break;
}
x = epsilon;//выводим Х равный нашему корню
cout << "X1: " << "f(" << x << ")=" << f21(x, n) << "\n\n";//вывод первого корня
x = d;//для первого корня мы получили, что f(c)<0, f(d)>0 и нашли корень, теперь надо найти точки Х ближайшие к нулю ф-ии
// при которых функция переходит из положительной в отрицательную область
while (f21(x, n) > 0) x += h;
c = x - h;
cout << "f(" << c << ")= " << f21(c, n) << "\n";
d = x + h;
cout << "f(" << d << ")= " << f21(d, n) << "\n";
while (((d - c) >= eps) | (f21(epsilon, n) >= eps))
{
epsilon = (c + d) / 2;
if (f21(c, n) * f21(epsilon, n) < 0) d = epsilon;
if (f21(c, n) * f21(epsilon, n) > 0) c = epsilon;
if (f21(epsilon, n) == 0) break;
}
x = epsilon;
cout << "X2: " << "f(" << x << ")=" << f21(x, n) << "\n\n";//вывод второго корня
x = d;//теперь надо найти корень в области, когда функция снова переходит из отрицательной в положительную область
while (f21(x, n) < 0) x += h;
c = x - h;
cout << "f(" << c << ")= " << f21(c, n) << "\n";
d = x + h;
cout << "f(" << d << ")= " << f21(d, n) << "\n";
while (((d - c) >= eps) | (f21(epsilon, n) >= eps))
{
epsilon = (c + d) / 2;
if (f21(c, n) * f21(epsilon, n) < 0) d = epsilon;
if (f21(c, n) * f21(epsilon, n) > 0) c = epsilon;
if (f21(epsilon, n) == 0) break;
}
x = epsilon;
cout << "X3: " << "f(" << x << ")=" << f21(x, n) << "\n\n";//вывод третьего корня
}