SaveText.Ru

Без имени
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. float f(float x){
  5.   return x+exp(x) - 5;
  6. }
  7. float f1(float x){
  8.   return 1+exp(x);
  9. }
  10. float f2(float x){
  11.   return exp(x);
  12. }
  13.  
  14. void find_interval(float *a, float *b, float (*func)(float),float step){
  15.     float prob = func(*a);
  16.     float i;
  17.     for (i=*a;i<*b;i+=step){
  18.         if (prob*func(i)<0){
  19.             *a=i-step;
  20.             *b=i;
  21.         }
  22.     }
  23.  
  24. }
  25. float Newt(float a,float b,float (*f)(float),float(*f1)(float),float(*f2)(float),float eps,int *n)
  26. {
  27.  
  28.   float x,t;
  29.     if(f(a)*f2(a)>0) t=a;
  30.     else t=b;
  31.   do
  32.   {
  33.     x=t;
  34.     t=x-f(x)/f1(x);
  35.     *n+=1;
  36.     printf("x: %f;t: %fn", x, t);
  37.  
  38.   } while(fabs(x-t)>eps);
  39.   return t;
  40. }
  41. main()
  42. {
  43.  int n=0;
  44.  float a, b, eps, t;
  45.  clrscr();
  46.   printf("Введите интервал: ");
  47.   scanf("%f%f", &a, &b);
  48.   find_interval(&a, &b, f, 1);
  49.   printf("Промежуток в котором функция меняет знак: ");
  50.   printf("a:%f; b:%fn", a, b);
  51.   t = Newt(a, b, f, f1, f2, 0.0001,&n);
  52.   printf("Корень функции t: %f n", t);
  53.   printf("Количество итераций n: %d", n);
  54.  getch();
  55. }

Share with your friends:

Print