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

Тема в разделе "C/C++/C#", создана пользователем karina0611, 21 июн 2013.

  1. karina0611

    karina0611 New Member

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


    Код (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 );
    }

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

    ixoyz Member

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

Поделиться этой страницей