
Составить две программы, одна из которых выделяет все интервалы, на которых нахо-дятся корни, а
вторая запрашивает левую границу очередного интервала и выводит найден-ный корень уравнения. x^3+3x^2-9x-5=-cos(x) Сделать на C++

Ответы на вопрос

Ответ:
function F(x: real): real;
begin
F := 3 * sin(x) + 2 * sqr(x) - 1;
end;
var
a, b, h, x, Fa, Fx: real;
begin
Write('Введите через пробел начало интервала, конец и шаг: ');
Readln(a, b, h);
x := a; Fa := F(a);
repeat
Fx := F(x);
if Fx = 0 then Writeln('Найден корень ', x:0:3)
else
if Fx * Fa < 0 then
Writeln('Найден интервал изоляции корня (', a:0:3, ';', x:0:3, ')');
a := x; Fa := Fx; x := x + h
until x > b;
end.
Тестовое решение:
Введите через пробел начало интервала, конец и шаг: 0 1.95 0.15
Найден интервал изоляции корня (0.150;0.300)
Введите через пробел начало интервала, конец и шаг: -5 5 0.1
Найден интервал изоляции корня (-1.500;-1.400)
Найден интервал изоляции корня (0.200;0.300)
Объяснение:
Лови! Удачки!



Для решения данной задачи на C++ нужно воспользоваться методом численного решения уравнений, например, методом бисекции. Метод бисекции позволяет находить корни уравнения на заданном интервале. Сначала мы найдем все интервалы, на которых находятся корни, а затем напишем вторую программу, которая будет запрашивать левую границу интервала и находить корень на этом интервале.
Программа для поиска интервалов:
cpp#include <iostream>
#include <cmath>
// Функция, вычисляющая значение функции f(x) = x^3 + 3x^2 - 9x - 5 + cos(x)
double f(double x) {
return x*x*x + 3*x*x - 9*x - 5 + cos(x);
}
int main() {
double a = -10.0; // Левая граница интервала
double b = 10.0; // Правая граница интервала
double step = 0.1; // Шаг для перебора интервалов
double x1 = a;
double x2 = a + step;
while (x2 <= b) {
if (f(x1) * f(x2) < 0) {
std::cout << "Корень на интервале [" << x1 << ", " << x2 << "]" << std::endl;
}
x1 = x2;
x2 += step;
}
return 0;
}
Программа для нахождения корней на заданном интервале:
cpp#include <iostream>
#include <cmath>
// Функция, вычисляющая значение функции f(x) = x^3 + 3x^2 - 9x - 5 + cos(x)
double f(double x) {
return x*x*x + 3*x*x - 9*x - 5 + cos(x);
}
// Функция для метода бисекции
double bisection(double a, double b) {
double eps = 1e-6; // Погрешность
while ((b - a) > eps) {
double mid = (a + b) / 2;
if (f(mid) == 0.0) {
return mid;
} else {
if (f(a) * f(mid) < 0) {
b = mid;
} else {
a = mid;
}
}
}
return (a + b) / 2;
}
int main() {
double a, b;
std::cout << "Введите левую границу интервала: ";
std::cin >> a;
std::cout << "Введите правую границу интервала: ";
std::cin >> b;
double root = bisection(a, b);
std::cout << "Найденный корень: " << root << std::endl;
return 0;
}
Первая программа находит все интервалы, на которых находятся корни, а вторая программа позволяет пользователю ввести интервал и находит корень уравнения на этом интервале с использованием метода бисекции.


Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili