Hellko

yr

Dec 19th, 2012
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.28 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. float f(float);     //  Function
  5. float ff(float);    //1st Derivative
  6. float fff(float);   //2nd Derivative
  7. float dih(void);
  8. float hor(void);
  9. float nut(void);
  10.  
  11. bool err=false;
  12. bool steps=true;    //turn on/off steps
  13.  
  14. int main() {
  15.     int x; float z;
  16.     while(true) {
  17.         printf("exp(x)+x=0\n1: Dihotomii\n2: Hord\n3: Newton\n0: Exit\n");
  18.         scanf("%d",&x);
  19.         switch(x) {
  20.         case 0: return 0;
  21.         case 1: z=dih(); break;
  22.         case 2: z=hor(); break;
  23.         case 3: z=nut(); break;
  24.         default: break;
  25.         }
  26.         if(!err) printf("Koren' yravneniya: x=%.10f\n\n",z); else err=true;
  27.     }
  28. }
  29.  
  30. float f(float x) {
  31.     return exp(x)+x;
  32. }
  33.  
  34. float ff(float x,float dx) {
  35.     //float dx=0.0001;
  36.     return (f(x+dx)-f(x))/dx;
  37. }
  38.  
  39. float fff(float x,float dx) {
  40.     return (f(x+dx)-2*f(x)+f(x-dx))/(dx*dx);
  41. }
  42.  
  43. float hor() {
  44.     float a,b,c,d,e;
  45.     printf("Vvedite [a,b], eps, delta:\n");
  46.     scanf("%f%f%f%f",&a,&b,&e,&d);
  47.  
  48.     if(f(a)*f(b)>0) {
  49.         printf("Koren ne mozhet bit' naiden na etom promezhytke etim metodom\n");
  50.         err=true;
  51.         return 0;
  52.     }
  53.  
  54.     while(true) {
  55.         c=a+fabs(f(a)/(f(b)-f(a)))*(b-a);
  56.         if(steps) printf("x=%.10f\n",c);
  57.         if(((fabs(c-a)<d) && (fabs(f(c))<e))) break;
  58.         if(f(c)*f(a)>0) a=c; else b=c;
  59.     }
  60.     return c;
  61. }
  62.  
  63. float dih() {
  64.     float a,b,c,d,e;
  65.     printf("Vvedite [a,b], eps, delta:\n");
  66.     scanf("%f%f%f%f",&a,&b,&e,&d);
  67.  
  68.     if(f(a)*f(b)>0) {
  69.         printf("Koren ne mozhet bit' naiden na etom promezhytke etim metodom\n");
  70.         err=true;
  71.         return 0;
  72.     }
  73.  
  74.     while(true) {
  75.         c=(a+b)/2;
  76.         if(steps) printf("x=%.10f\n",c);
  77.         if(((fabs(c-a)<d) && (fabs(f(c))<e))) break;
  78.         if(f(c)*f(a)>0) a=c; else b=c;
  79.     }
  80.     return c;
  81. }
  82.  
  83. float nut() {
  84.     float x,xx,d,e;
  85.     printf("Vvedite x0, eps, delta:\n");
  86.     scanf("%f%f%f",&x,&e,&d);
  87.  
  88.     if(f(x)*fff(x,e)<0) {
  89.         printf("Koren ne mozhet bit' naiden pri etom x0 etim metodom\n");
  90.         err=true;
  91.         return 0;
  92.     }
  93.  
  94.     while(true) {
  95.         xx=x-f(x)/ff(x,e);
  96.         if(steps) printf("x=%.10f\n",xx);
  97.         if((fabs(xx-x)<d) && (fabs(f(x))<e)) break;
  98.         x=xx;
  99.     }
  100.     return xx;
  101. }
Advertisement
Add Comment
Please, Sign In to add comment