Задать вопрос
@TyHoPoGO

Не могу понять, правильно ли я ввел формулу?

652d234db2464731198314.png

Программа должна уточнить корень заданного нелинейного уравнения с диапазоном [0; 2] с точностью e = 0.001.

У меня же программа выдает странный ответ 0.000976562.
Я так полагаю, что у меня формула неправильно введена или же дано неверное.

# include <iostream>
# include <cmath>
using std::cout;
using std::cin;

double f(double x) {
	return pow(pow(sqrt(pow(x, 3) - 2), 1.0 / 3.0), 2) - 1;  //формула
}

int main() {
	setlocale(LC_ALL, "RU");
	double e, c;
	double a = 0;
	double b = 2;

	cout << "Введите значение e (коэффицента точности вычислений): \n";
	cin >> e;
	if (e >= abs(b - a)) {
		cout << "Ошибка. Коэффицент точности не имеет смылса - он больше диапазона значений или равен ему.";
		return 0;
	}

	while (abs(b - a) > e) {
		c = (a + b) / 2.0;
		if (f(c) == 0) {
			cout << "Корень уравнения равен " << c;
			break;
		}
		if (f(a) * f(c) > 0) { a = c; }
		else { b = c; }
	}
	cout << "Корень уравнения приблизительно равен " << c;
	return 0;
}
  • Вопрос задан
  • 189 просмотров
Подписаться 2 Простой 6 комментариев
Пригласить эксперта
Ответы на вопрос 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Какое значение эта формула принимает при x=1, например?

Ну и у вас условие в бинарном поиске неправильное. Если f(a) и f(c) принимают разные значения, то корень находится между a и c. Вы же переходите к отрезку [c,b].
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы