Помогите пожалуйста
Найти решение уравнения(arccos(x-1)+x^3-4=0) на указанном диапазоне ([0.5;1.9). используя численный метод-Метод Ньютона(касательных). Есть код, но не рабочий.
#include <iostream>
#include <cmath>
using namespace std;
double func(double x) {
return acos(x - 1) + x * x * x - 4;
}
int main() {
float x, y, der1, der2;
const float eps = 0.000001;
x = -3;
y = func(x);
while (abs(y - x) > eps) {
der1 = 3 * x * x - 1 / sqrt(x * (2 - x));
der2 = 6 * x - (x - 1) / pow(x * (2 - x), 1.5);
y = x;
x = y - der1 / der2;
}
cout << "Result: " << y << endl;
return 0;
}
C/C++
Найти решение уравнения(arccos(x-1)+x^3-4=0) на указанном диапазоне ([0.5;1.9]). используя численный метод-Метод Ньютона
Я не знаю этот метод, но у вас дан диапазон x [0.5;1.9]
А вы присваиваете значение -3 в начале. Это за пределами отрезка.
Нужно задать нижнюю границу в начале (0.5).
И с каждым проходом цикла прибавлять к x какое-то значение, пока x не превысит значение 1.9
И проверять y
А вы присваиваете значение -3 в начале. Это за пределами отрезка.
Нужно задать нижнюю границу в начале (0.5).
И с каждым проходом цикла прибавлять к x какое-то значение, пока x не превысит значение 1.9
И проверять y
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
double func(double x)
{
return acos(x - 1) + x * x * x - 4.0;
}
int main()
{
double x, h = 1e-4, d = 2. * h;
cout << "x n » ";
cin >> x >> n;
for (int i = 1; i <= n; i++)
{
x -= func(x) * d / (func(x + h) - func(x - h));
cout << setw(2) << i << setprecision(15)
<< fixed << setw(21) << x << endl;
}
}
Когда я беру за начальное приближение х=1 и заказываю 10 итераций (хотя, как видно из скрина ниже, для отыскания корня уравнения с машинной точностью хватает и шести итераций !), то всё хорошо. Но нельзя брать за начальное приближение любое число из диапазона [0,5; 1,9], потому что на этом отрезке есть точка минимума (х≈0.6), а по теореме Ферма́ производная гладких функций в их точках экстремума равна нулю, поэтому и касательная к графику функции в этой точке минимума получается горизонтальной прямой параллельной оси абсцисс и уходящей в бесконечность, а метод касательных Ньютона при таком начальном приближении неприменим - это здесь главный подвох!. (•‿•)

#include <iomanip>
#include <cmath>
using namespace std;
double func(double x)
{
return acos(x - 1) + x * x * x - 4.0;
}
int main()
{
double x, h = 1e-4, d = 2. * h;
cout << "x n » ";
cin >> x >> n;
for (int i = 1; i <= n; i++)
{
x -= func(x) * d / (func(x + h) - func(x - h));
cout << setw(2) << i << setprecision(15)
<< fixed << setw(21) << x << endl;
}
}
Когда я беру за начальное приближение х=1 и заказываю 10 итераций (хотя, как видно из скрина ниже, для отыскания корня уравнения с машинной точностью хватает и шести итераций !), то всё хорошо. Но нельзя брать за начальное приближение любое число из диапазона [0,5; 1,9], потому что на этом отрезке есть точка минимума (х≈0.6), а по теореме Ферма́ производная гладких функций в их точках экстремума равна нулю, поэтому и касательная к графику функции в этой точке минимума получается горизонтальной прямой параллельной оси абсцисс и уходящей в бесконечность, а метод касательных Ньютона при таком начальном приближении неприменим - это здесь главный подвох!. (•‿•)

Серёга Кочергин
===========================================требуется!!========
ПОМОЩ! в голосовании
https://otvet.mail.ru/question/228021301
Cosmos, 1 месяц назад
Высший разум
Рождаются!
>
> > >
> > > > Выбор ответа лучший
> >
> > > >
> > > > @firsov-2022
ПОМОЩ! в голосовании
https://otvet.mail.ru/question/228021301
Cosmos, 1 месяц назад
Высший разум
Рождаются!
>
> > >
> > > > Выбор ответа лучший
> >
> > > >
> > > > @firsov-2022
Похожие вопросы
- C++ как написать if(x!=1,2,3)
- Вычислить значение функции F(x), разложенной в ряд и сходящейся в указанной области. Написать программу на языке C++
- Найти корни уравнений методом итераций
- Помогите пожалуйста построить таблицу значений функции y = f(x) для x ∈ [a, b] с шагом h (с помощью условного оператора)
- Помогите написать код решения уравнения, желательно на с++
- . Разветвляющийся процесс. Пересечение линий и решение уравнений.
- Никак не получается найти решение задачи
- Нужно составить программу для решения дифф. уравнений методом Рунге-Кутта
- Найти все простые числа в диапазоне от a до b
- Учу с++, можете объяснить на пальцах? не понимаю работу условия в теле цикла... if ((i+1)%3 != 0)
Когда условие выполнится, нужно прервать цикл break;