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

karina0611

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


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 );
}

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

ixoyz

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