К У Р С О В А / К У Р С О В А ! / Реалізація дотичних
.docМетод Ньютона (метод касательных) - итерационный метод. Может применяться для нахождения корней функций типа f(x) = 0;
-
Находим грубое приближение корня X0.
-
Вычисляем поправку к значению X0: Dx = -f(X0)/f'(X0).
-
Новое значение X1 = X0 + Dx.
-
Проверка условия f(X1) = 0.
-
Если не удовлетворены, идем на шаг 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;
}