Newton-Raphson (NR)

Standard
                                                               
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAX 200
#define ED 0.5e-12
#define ENR 0.5e-16

//-------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------
float bisection(float (*f)(float),float *a,float *b);
float stshmeiou(float (*f)(float),float (*g)(float),float *x);
float newton(float (*f)(float),float (*parf)(float),float *x);
float temnousas(float(*f)(float),float *x,float *y);
int ebisection(float (*f)(float),float *a,float *b);
int estshmeiou(float (*f)(float),float (*g)(float),float *x);
int enewton(float (*f)(float),float (*parf)(float),float *x);
int etemnousas(float(*f)(float),float *x,float *y);
float nbisection(float (*f)(float),float *a,float *b);
float nnewton(float (*f)(float),float (*parf)(float),float *x);
float f1(float x);
float f2(float x);
float f3(float x);
float g1(float x);
float g2(float x);
float g3(float x);
float parf1(float x);
float parf2(float x);
float parf3(float x);
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
int main(void)
{
    int epilogi;
    float a1,b1,a2,b2,a3,b3,q1,q2,q3,s1,s2,s3,x1,x2,x3,n1,n2,n3,t1,t2,t3,y1,y2,y3;
    float x01,x02,x03,x11,x12,x13,y01,y02,y03,y11,y12,y13,z01,z02,z03,z11,z12,z13,w1,w2,w3;
    char xar;
    xar='n';
    while(xar=='n')
    {
       printf("-----------------------------------ASKHSH 1----------------------------------");
       printf("-----------------------------------------------------------------------------------");
       printf("\nPROSEGGISH TIMHS X[N] THS RIZAS J");
       printf("\nPATHSTE:");
       printf("\n1.GIA F1");
       printf("\n2.GIA F2");
       printf("\n3.GIA F3");
       printf("\n4.GIA TAXYTHTA SYGKLISHS");
       printf("\n5.EMFANISH APOTELESMATON");
       printf("\n6.METHODOS DIXOTOMISIS-NR\n");
       scanf("\n%d",&epilogi);
       switch(epilogi)
       {
          case 1:
              a1=-1;
              b1=2;             
              x1=-1;
              y1=2;
              q1=bisection(f1,&a1,&b1);           
              printf("H prosegisi tis rizas me thn methodo ths dixotomisis\ngia tin f1(x) einai q1=%lf\n",q1);
              s1=stshmeiou(f1,g1,&x1);            
              printf("\nH prosegisi tis rizas me thn methodo tou statherou shmeiou\ngia tin f1(x) einai s1=%lf\n",s1);
              n1=newton(f1,parf1,&x1);            
              printf("\nH prosegisi tis rizas me thn methodo NR\ngia tin f1(x) einai n1=%lf\n",n1);
              t1=temnousas(f1,&x1,&y1);                 
              printf("\nH prosegisi tis rizas me thn methodo ths temnousas\ngia tin f1(x) einai t1=%lf\n",t1);
              break;                              
          case 2:                                    
              a2=0;
              b2=1;
              x2=0.5;
              y2=1;
              q2=bisection(f2,&a2,&b2);
              printf("H prosegisi tis rizas me thn methodo ths dixotomisis\ngia tin f2(x) einai q2=%lf\n",q2);
              s2=stshmeiou(f2,g2,&x2);
              printf("\nH prosegisi tis rizas me thn methodo tou statherou shmeiou\ngia tin f2(x) einai s2=%lf\n",s2);
              n2=newton(f2,parf2,&x2);
              printf("\nH prosegisi tis rizas me thn methodo NR\ngia tin f2(x) einai n2=%lf\n",n2);
              t2=temnousas(f2,&x2,&y2);                 
              printf("\nH prosegisi tis rizas me thn methodo ths temnousas\ngia tin f2(x) einai t2=%lf\n",t2);
              break;
          case 3:
              a3=4;
              b3=5;
              x3=4;
              y3=5;
              q3=bisection(f3,&a3,&b3);
              printf("\nH prosegisi tis rizas me thn methodo ths dixotomisis\ngia tin f3(x) einai q3=%lf\n",q3);
              s3=stshmeiou(f3,g3,&x3);
              printf("\nH prosegisi tis rizas me thn methodo tou statherou shmeiou\ngia tin f3(x) einai s3=%lf\n",s3);
              n3=newton(f3,parf3,&x3);
              printf("\nH prosegisi tis rizas me thn methodo NR\ngia tin f3(x) einai n3=%lf\n",n3);
              t3=temnousas(f3,&x3,&y3);                 
              printf("\nH prosegisi tis rizas me thn methodo ths temnousas\ngia tin f3(x) einai t3=%lf\n",t3);
              break;
          case 4:
              a1=-1;
              b1=2;             
              x1=-1;
              y1=2;
              a2=0;
              b2=1;
              x2=0.5;
              y2=1;
              a3=4;
              b3=5;
              x3=4;
              y3=5;
              printf("\nO ARITHMOS EPANALIJEON TON METHODON EINAI:");
              getchar();
              printf("\nGIA F1:");
              printf("\nDIXOTOMISI:%d",ebisection(f1,&a1,&b1));
              printf("\nSTSHMEIOU:%d",estshmeiou(f1,g1,&x1));
              printf("\nNR:%d",enewton(f1,parf1,&x1));
              printf("\nTEMNOUSA:%d",etemnousas(f1,&x1,&y1));
              getchar();
              printf("\nGIA F2:");
              printf("\nDIXOTOMISI:%d",ebisection(f2,&a2,&b2));
              printf("\nSTSHMEIOU:%d",estshmeiou(f2,g2,&x2));
              printf("\nNR:%d",enewton(f2,parf2,&x2));
              printf("\nTEMNOUSA:%d",etemnousas(f2,&x2,&y2));
              getchar();
              printf("\nGIA F3:");
              printf("\nDIXOTOMISI:%d",ebisection(f3,&a3,&b3));
              printf("\nSTSHMEIOU:%d",estshmeiou(f3,g3,&x3));
              printf("\nNR:%d",enewton(f3,parf3,&x3));
              printf("\nTEMNOUSA:%d",etemnousas(f3,&x3,&y3));
              break;
          case 5:
              a1=-1;
              b1=2;
              x01=-1;
              x02=1.5;
              x03=0.5;
              x11=0;
              x12=1;
              x13=2;
              a2=0;
              b2=1;
              y01=0.3;
              y02=0.5;
              y03=0.7;
              y11=0;
              y12=0.3;
              y13=1;
              a3=4;
              b3=5;
              z01=4;
              z02=4.3;
              z03=4.5;
              z11=4.3;
              z12=4.5;
              z13=4.8;
              printf("\n--------------------------------------------------------------------");
              printf("\n--------------------------------------------------------------------");
              printf("\n   ||                PINAKAS APOTELESMATON                        ||");
              printf("\n--------------------------------------------------------------------");
              printf("\n   ||                     METHODOS                                ||");
              printf("\n--------------------------------------------------------------------");
              printf("\n   ||      I      ||     II      ||     III     ||      IV        ||");
              printf("\n--------------------------------------------------------------------");
              printf("\n   ||Xo|Xn|F(Xn)|n||Xo|Xn|F(Xn)|n||Xo|Xn|F(Xn)|n||Xo|X1|Xn|F(Xn)|n||");
              printf("\n--------------------------------------------------------------------");

              printf("\n   ||-|%.2f|%2.f|%d||-1 |%.2f|%2.f|%d||-1 |%.2f|%2.f|%d||-1 |0|%.2f|%2.f|%d||",bisection(f1,&a1,&b1),f1(bisection(f1,&a1,&b1)),ebisection(f1,&a1,&b1),stshmeiou(f1,g1,&x01),f1(stshmeiou(f1,g1,&x01)),estshmeiou(f1,g1,&x01),newton(f1,parf1,&x01),f1(newton(f1,parf1,&x01)),enewton(f1,parf1,&x01),temnousas(f1,&x01,&x11),f1(temnousas(f1,&x01,&x11)),etemnousas(f1,&x01,&x11));
              printf("\n F1||-|%.2f|%2.f|%d||1.5|%.2f|%2.f|%d||1.5|%.2f|%2.f|%d||1.5|1|%.2f|%2.f|%d||",bisection(f1,&a1,&b1),f1(bisection(f1,&a1,&b1)),ebisection(f1,&a1,&b1),stshmeiou(f1,g1,&x02),f1(stshmeiou(f1,g1,&x02)),estshmeiou(f1,g1,&x02),newton(f1,parf1,&x02),f1(newton(f1,parf1,&x02)),enewton(f1,parf1,&x02),temnousas(f1,&x02,&x12),f1(temnousas(f1,&x02,&x12)),etemnousas(f1,&x02,&x12));
              printf("\n   ||-|%.2f|%2.f|%d||0.5|%.2f|%2.f|%d||0.5|%.2f|%2.f|%d||0.5|2|%.2f|%2.f|%d||",bisection(f1,&a1,&b1),f1(bisection(f1,&a1,&b1)),ebisection(f1,&a1,&b1),stshmeiou(f1,g1,&x03),f1(stshmeiou(f1,g1,&x03)),estshmeiou(f1,g1,&x03),newton(f1,parf1,&x03),f1(newton(f1,parf1,&x03)),enewton(f1,parf1,&x03),temnousas(f1,&x03,&x13),f1(temnousas(f1,&x03,&x13)),etemnousas(f1,&x03,&x13));
              printf("\n--------------------------------------------------------------------");

              printf("\n   ||-|%.2f|%2.f|%d||0.3|%.2f|%2.f|%d||0.3|%.2f|%2.f|%d||0.3|0|%.2f|%2.f|%d||",bisection(f2,&a2,&b2),f2(bisection(f2,&a2,&b2)),ebisection(f2,&a2,&b2),stshmeiou(f2,g2,&y01),f2(stshmeiou(f2,g2,&y01)),estshmeiou(f2,g2,&y01),newton(f2,parf2,&y01),f2(newton(f2,parf2,&y01)),enewton(f2,parf2,&y01),temnousas(f2,&y01,&y11),f2(temnousas(f2,&y01,&y11)),etemnousas(f2,&y01,&y11));
              printf("\n F2||-|%.2f|%2.f|%d||0.5|%.2f|%2.f|%d||0.5|%.2f|%2.f|%d||0.5|0.3|%.2f|%2.f|%d||",bisection(f2,&a2,&b2),f2(bisection(f2,&a2,&b2)),ebisection(f2,&a2,&b2),stshmeiou(f2,g2,&y02),f2(stshmeiou(f2,g2,&y02)),estshmeiou(f2,g2,&y02),newton(f2,parf2,&y02),f2(newton(f2,parf2,&y02)),enewton(f2,parf2,&y02),temnousas(f2,&y02,&y12),f2(temnousas(f2,&y02,&y12)),etemnousas(f2,&y02,&y12));
              printf("\n   ||-|%.2f|%2.f|%d||0.7|%.2f|%2.f|%d||0.7|%.2f|%2.f|%d||0.7|1|%.2f|%2.f|%d||",bisection(f2,&a2,&b2),f2(bisection(f2,&a2,&b2)),ebisection(f2,&a2,&b2),stshmeiou(f2,g2,&y03),f2(stshmeiou(f2,g2,&y03)),estshmeiou(f2,g2,&y03),newton(f2,parf2,&y03),f2(newton(f2,parf2,&y03)),enewton(f2,parf2,&y03),temnousas(f2,&y03,&y13),f2(temnousas(f2,&y03,&y13)),etemnousas(f2,&y03,&y13));
              printf("\n--------------------------------------------------------------------");

              printf("\n   ||-|%.2f|%2.f|%d||4  |%.2f|%2.f|%d||4 |%.2f|%2.f|%d||4|4.3|%.2f|%2.f|%d||",bisection(f3,&a3,&b3),f3(bisection(f3,&a3,&b3)),ebisection(f3,&a3,&b3),stshmeiou(f3,g3,&z01),f3(stshmeiou(f3,g3,&z01)),estshmeiou(f3,g3,&z01),newton(f3,parf3,&z01),f3(newton(f3,parf3,&z01)),enewton(f3,parf3,&z01),temnousas(f3,&z01,&z11),f3(temnousas(f3,&z01,&z11)),etemnousas(f3,&z01,&z11));
              printf("\n F3||-|%.2f|%2.f|%d||4.3|%.2f|%2.f|%d||4.3|%.2f|%2.f|%d||4.3|4.5|%.2f|%2.f|%d||",bisection(f3,&a3,&b3),f3(bisection(f3,&a3,&b3)),ebisection(f3,&a3,&b3),stshmeiou(f3,g3,&z02),f3(stshmeiou(f3,g3,&z02)),estshmeiou(f3,g3,&z02),newton(f3,parf3,&z02),f3(newton(f3,parf3,&z02)),enewton(f3,parf3,&z02),temnousas(f3,&z02,&z12),f3(temnousas(f3,&z02,&z12)),etemnousas(f3,&z02,&z12));
              printf("\n   ||-|%.2f|%2.f|%d||4.5|%.2f|%2.f|%d||4.5 |%.2f|%2.f|%d||4.5|4.8|%.2f|%2.f|%d||",bisection(f3,&a3,&b3),f3(bisection(f3,&a3,&b3)),ebisection(f3,&a3,&b3),stshmeiou(f3,g3,&z03),f3(stshmeiou(f3,g3,&z03)),estshmeiou(f3,g3,&z03),newton(f3,parf3,&z03),f3(newton(f3,parf3,&z03)),enewton(f3,parf3,&z03),temnousas(f3,&z03,&z13),f3(temnousas(f3,&z03,&z13)),etemnousas(f3,&z03,&z13));
              printf("\n--------------------------------------------------------------------");
              printf("\n--------------------------------------------------------------------");
              break;
          case 6:
              a1=-1;
              b1=2; 
              a2=0;
              b2=1;
              a3=4;
              b3=5;
              w1=nbisection(f1,&a1,&b1);
              w2=nbisection(f2,&a2,&b2);
              w3=nbisection(f3,&a3,&b3);
              printf("\nF1:");
              printf("\nH proseggistiki timh ths rizas j einai:");
              printf("\n%lf",nnewton(f1,parf1,&w1));
              printf("\n-----------------------------------------");
              printf("\nF2:");
              printf("\nH proseggistiki timh ths rizas j einai:");
              printf("\n%lf",nnewton(f2,parf2,&w2));
              printf("\n-----------------------------------------");
              printf("\nF3:");
              printf("\nH proseggistiki timh ths rizas j einai:");
              printf("\n%lf",nnewton(f3,parf3,&w3));
              printf("\n-----------------------------------------");
              break;
          default:
              printf("O arithmos den brisketai metaji 1 kai 6");
              break;
       }
       printf("\nGia synexeia patiste n(ai) diaforetika o(xi):");
       scanf("\n%c",&xar);
       getchar();

    }
    return 0;
}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------

float bisection(float (*f)(float),float *a,float *b)
    {

        int m;
        float x,g,h;
        float c,r;
        c=(*a+*b)/2;
        //printf("%lf",c);

        m=0;
        while(((*b-*a)>0) && ((*f)(c)!=0) && m<MAX)
        {

            //printf("%lf",c);
            c=(*a+*b)/2;
            g=(*f)(*a);
            r=(*f)(*b);
            h=(*f)(c);
            m++;
            if(h==0)
            {
                x=c;
            }

                else if(g*h<0 )
            {

                *b=c;

            }
                else if(r*h<0)

            {
                    *a=c;

            }
                else if(g*h>0 && r*h>0)
            { 
                    printf("h methodos tis dix den paizei");
                    return (*a+*b)/2;
            }
        }
           x=(*b+*a)/2;
         return (x);
    }

//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------

float stshmeiou(float (*f)(float),float (*g)(float),float *x)
{                                                            
  int m=0;
  float p,k;
  p=(*g)(*x);
  //printf("p=%lf",p);
  while(fabs((*f)(p))>0 && m<MAX)
  {
      //printf("p=%lf",p);
      m++;
      k=(*g)(p);
      p=k;
  } 
  return p;
}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------

float newton(float (*f)(float),float (*parf)(float),float *x)
{
   float o,p;
   float k,l;
   int m=0;
   o=(*x);
   if((*parf)(o)!=0)
   {
      p=o-(*f)(o)/(*parf)(o);
      //printf("p=%lf",p);
      while(fabs((p-o)/o)>0 && fabs((*f)(p))>0 && m<MAX && (*parf)(o)!=0)
      {
         //printf("p=%lf",p);
         m++;
         k=(*f)(p);
         l=(*parf)(p);
         o=p;
         p=o-k/l;
      }
   }
   else
   {
      printf("H methodos NR den paizei");
   }
   return p;
}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------

float temnousas(float(*f)(float),float *x,float *y)
{   
   float o,p,k,w,l;
   int m=0;
   o=(*x);          
   w=(*y);          
   if((*f)(o)!=(*f)(w))
   {
      p=o-((*f)(o)*(o-w)/((*f)(o)-(*f)(w)));
      while(fabs((p-o)/o)>0 && fabs((*f)(p))>0 && (*f)(o)!=(*f)(w))
      {
         //printf("p=%lf",p);
         k=(*f)(p);
         l=(*f)(o);
         w=o;
         o=p;
         p=o-(k*(o-w)/(k-l));
      }
   }
   else
   {
      printf("H methodos tis temnousas den paizei");
   }
   return p;
}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------  

int ebisection(float (*f)(float),float *a,float *b)
    {

        int m;
        float x,g,h;
        float c,r;
        c=(*a+*b)/2;
        //printf("%lf",c);

        m=0;
        while(((*b-*a)>0) && ((*f)(c)!=0) && m<MAX)
        {

            //printf("%lf",c);
            c=(*a+*b)/2;
            g=(*f)(*a);
            r=(*f)(*b);
            h=(*f)(c);
            m++;
            if(h==0)
            {
                return (m);
                x=c;

            }

                else if(g*h<0 )
            {

                *b=c;

            }
                else if(r*h<0)

            {
                    *a=c;

            }
                else if(g*h>0 && r*h>0)
            { 
                    return (m);
                    printf("h methodos tis dix den paizei");
                    //return (*a+*b)/2;
            }
        }
           x=(*b+*a)/2;
         return (m);
    }
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------

int estshmeiou(float (*f)(float),float (*g)(float),float *x)
{                                                            
  int m;
  float p,k;
  p=(*g)(*x);
  //printf("p=%lf",p);
  m=0;
  while(fabs((*f)(p))>0 && m<MAX)
  {
      //printf("p=%lf",p);
      m++;
      k=(*g)(p);
      p=k;
  } 
  return m;
}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------

int enewton(float (*f)(float),float (*parf)(float),float *x)
{
   float o,p;
   float k,l;
   int m;
   o=(*x);
   if((*parf)(o)!=0)
   {
      p=o-(*f)(o)/(*parf)(o);
      //printf("p=%lf",p);
      m=0;
      while(fabs((p-o)/o)>0 && fabs((*f)(p))>0 && m<MAX && (*parf)(o)!=0)
      {
         //printf("p=%lf",p);
         m++;
         k=(*f)(p);
         l=(*parf)(p);
         o=p;
         p=o-k/l;
      }
   }
   else
   {
      printf("H methodos NR den paizei");
   }
   return m;
}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------

int etemnousas(float(*f)(float),float *x,float *y)
{   
   float o,p,k,w,l;
   int m;
   o=(*x);          
   w=(*y);          
   if((*f)(o)!=(*f)(w))
   {
      p=o-((*f)(o)*(o-w)/((*f)(o)-(*f)(w)));
      m=0;
      while(fabs((p-o)/o)>0 && fabs((*f)(p))>0 && (*f)(o)!=(*f)(w))
      {
         //printf("p=%lf",p);
         m++;
         k=(*f)(p);
         l=(*f)(o);
         w=o;
         o=p;
         p=o-(k*(o-w)/(k-l));

      }
   }
   else
   {
      printf("H methodos tis temnousas den paizei");
   }
   return m;
}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------

float nnewton(float (*f)(float),float (*parf)(float),float *x)
{
   float o,p;
   float k,l;
   int m=0;
   o=(*x);
   if((*parf)(o)!=0)
   {
      p=o-(*f)(o)/(*parf)(o);
      //printf("p=%lf",p);
      while(fabs((p-o)/o)>ENR && fabs((*f)(p))>ENR && m<MAX && (*parf)(o)!=0)
      {
         //printf("p=%lf",p);
         m++;
         k=(*f)(p);
         l=(*parf)(p);
         o=p;
         p=o-k/l;
      }
   }
   else
   {
      printf("H methodos NR den paizei");
   }
   return p;
}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------

float nbisection(float (*f)(float),float *a,float *b)
    {

        int m;
        float x,g,h;
        float c,r;
        c=(*a+*b)/2;
        //printf("%lf",c);

        m=0;
        while(((*b-*a)>ED) && ((*f)(c)!=0) && m<MAX)
        {

            //printf("%lf",c);
            c=(*a+*b)/2;
            g=(*f)(*a);
            r=(*f)(*b);
            h=(*f)(c);
            m++;
            if(h==0)
            {
                x=c;
            }

                else if(g*h<0 )
            {

                *b=c;

            }
                else if(r*h<0)

            {
                    *a=c;

            }
                else if(g*h>0 && r*h>0)
            { 
                    printf("h methodos tis dix den paizei");
                    return (*a+*b)/2;
            }
        }
           x=(*b+*a)/2;
         return (x);
    }
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------

float f1(float x)
{
    return (x*x*x*x-x*x*x-3*x*x+5*x-2);
}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
float f2(float x)
{
    return (exp(x)-5*x*x);
}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
float f3(float x)
{
    return (tan(x)-(0.5)*x);
}    
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------         
float g1(float x)
{ 
    return (((-4)*x*x*x+3*x*x+6*x)/5);
}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
float g2(float x)
{ 
    return (sqrt((exp(x)/5)));
}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
float g3(float x)
{ 
    return (tan(x)/0.5);
}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
float parf1(float x)
{
    return (4*x*x*x-3*x*x-6*x+5);
}    
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
float parf2(float x)
{
    return (exp(x)-10*x);
}    
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
float parf3(float x)
{
    return (1/(cos(x)*cos(x))-(0.5));
}    
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
//------------------------------------- END ------------------------------------------------
yeezy boost 350 ua yeezytrainer yeezy boost 350 ua yeezytrainer yeezytrainer yeezy boost 350 ua yeezy boost 350 ua yeezy shoes yeezy shoes yeezy boost online

yeezy 350 boost for sale yeezy boost online yeezy shoes yeezy 350 boost for sale yeezy boost online yeezy shoes yeezy 350 boost for sale yeezy boost online yeezy shoes yeezy 350 boost for sale yeezy boost online yeezy shoes