Лабораторная работа №12 / c2c+
.doc#include<stdio.h>
#include<math.h>
//newton
void func(double x, double & fx, double & dfx)
fx = x*x*x-3*x+1;//вычисление значения функции
dfx = 3*x*x - 3; //вычисление значения производной
void newton(double x) /* newton */
const double tol = 1.0E-9;
int max = 20;
double fx, dfx, dx, x1;
int i;
char error;
error = 0;
i = 0;
do
i = i + 1;
x1 = x;
func(x,fx,dfx);
if (dfx == 0.0)
error = 1;
x = 1.0;
printf("%cERROR: slope zero",7);
else
dx = fx/dfx;
x = x1 - dx;
printf("x=%f, fx=%f, dfx=%f\n",x,fx,dfx);
while(!(error || (i > max) || (abs(dx) <= abs(tol*x)) )); if (i > max)
printf("%cERROR: no convergence in %d loops\n",7,max); error = 1;
/* newton */
void main()
double x = 43.356;
newton(x);//параметр x - примерный корень