Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

К У Р С О В А / К У Р С О В А ! / Реалізація дотичних

.doc
Скачиваний:
10
Добавлен:
07.06.2015
Размер:
33.28 Кб
Скачать

Метод Ньютона (метод касательных) - итерационный метод. Может применяться для нахождения корней функций типа f(x) = 0;

  1. Находим грубое приближение корня X0.

  2. Вычисляем поправку к значению X0: Dx = -f(X0)/f'(X0).

  3. Новое значение X1 = X0 + Dx.

  4. Проверка условия f(X1) = 0.

  5. Если не удовлетворены, идем на шаг 2, но уже с x = X1.

-

// Вычисление квадратного корня из P с погрешностью е при начальном приближении x0. #include <math.h> double sqrt(const double P, const double e, const double x0) {   double x = x0; // Шаг 1   while(1)           {     double f = x * x - P;     if(fabs(f) < e) // Шаги 4, 5       break;     double dx = -f / (2.0 * x) // Шаг 2     x += dx; // Шаг 3.   }   return x; }

#include <iostream>

#include <cstdlib>

#include <cmath>

 

using namespace std;

 

double f(double x) { return cos(x)-x+1; } //Функция, нули которой ищем

double df(double x) { return -sin(x)-1; } //Её производная

 

int main() {

 double tmp,x,eps;

 int N=0;

 

 cout<<"eps=";

 cin>>eps;   //Точность

 cout<<"x0=";

 cin>>x;     //Начальное приближение

 tmp=x+2*eps;

    while(fabs(x-tmp)>eps) { //Выбран останов |x[n]-x[n+1]|<eps

     tmp=x;

     x=x-f(x)/df(x);

     N++;

   }

   cout.setf(ios::scientific);

cout<<endl<<endl<<"x="<<x<<endl<<"N="<<N<<endl;

cin>>N;

return 0;

}