• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Метод Ньютона Для Решения Нелинейных Уравнений

  • Автор темы karina0611
  • Дата начала
K

karina0611

Вечер добрый.
Мне было дано такое задание: реализовать метод Ньютона для решения нелинейных уравнений, чтобы в итоге на экран выводилось: значение неизвестной, количество итераций, потребовавшихся для нахождения решения, а также время затраченное на нахождения ответа.
Я попробовала написать:


C++:
//#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;

float f (float);
float df (float);
int main(int argc, char* argv[])
{
float x0,xk,a,b,e;
int count = 0;
cout<<"Vvedite à:"<<endl;
cin>>a;
cout<<"Vvedite b:"<<endl;
cin>>b;  
cout<<"Vvedite x0:"<<endl;
cin>>x0;  
cout<<"Vvedite e:"<<endl;
cin>>e;
while ( fabs(xk-x0)> e )
{
xk=x0-((f(x0))/(df(x0))); 
cout << count <<"-iter = " << xk << endl;
count++; 
}
getch();
system("pause");
return 0;
}
float f (float x)
{
// func
return (exp(x)+ x*x -2);

}

float df (float x)
// dif funk
{
return (exp(x)+ 2*x );
}


Но проблема в том, что цикл получается бесконечный и в связи с этим с количеством итераций проблема. Подскажите, пожалуйста, как исправить? И Что добавить, чтобы выводило время в наносекундах?
 
I

ixoyz

while ( fabs(xk-x0)> e )
В теле цикла xk зависит от x0 по некой формуле. x0 не меняется, соответственно и xk имеет одно и тоже значение, а следовательно и fabs(xk-x0) не изменяется. Отсюда и бесконечный цикл. Проверь тело функции, либо xk должен манятся, либо x0. Скорее всего по формуле аля x = x - f() или что-то типа того.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!