본문 바로가기

IT/Numerical analysis

Secant Method c언어로 구현하기


  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. #define PI  3.1415926535897931
  5. #define e 2.71828
  6.  
  7. #define thshold 2 * pow(10,-4)
  8.  
  9.  
  10. double fx(double x)
  11. {
  12.                 return (7*sin(x) * pow(e,(-x)) -1);
  13. }
  14.  
  15. void Secant_Method(double xl, double xu)
  16. {
  17.                 double a,b,fa,fb,p;
  18.                 double sol;
  19.  
  20.         int i=0;
  21.  
  22.                 double eia=100;
  23.                 double eit;
  24.  
  25.                
  26.                 a = xl;
  27.                 b = xu;
  28.                 fa=fx(a);
  29.         fb=fx(b);
  30.  
  31.                 while(1)
  32.         {
  33.                         p=b-fb*(b-a)/(fb-fa);
  34.                                 eia = fabs((b-a)/b)*100;
  35.  
  36.                         if(eia<thshold)
  37.                 {
  38.                                        
  39.                                        
  40.                         sol = p;
  41.                         break;
  42.                 }
  43.  
  44.                 i++;
  45.                 a=b;
  46.                 fa=fb;
  47.                 b=p;
  48.                 fb=fx(p);
  49.         }
  50.  
  51.        
  52.  
  53.                 eia = 100;
  54.  
  55.                 a = xl;
  56.                 b = xu;
  57.  
  58.             fa=fx(a);
  59.         fb=fx(b);
  60.  
  61.  
  62.                 while(1)
  63.         {
  64.                         p=b-fb*(b-a)/(fb-fa);
  65.  
  66.                                 eia = fabs((b-a)/b)*100;
  67.                                 eit = fabs((sol-b)/sol)*100;
  68.  
  69.                 printf("%d a=%lf\t b=%lf\t eai = %lf\t eti = %lf\n",i,a,b,eia,eit);
  70.                
  71.                                 if(eia<thshold)
  72.                 {
  73.                         printf("x=%lf\n",p);
  74.                         break;
  75.                 }
  76.  
  77.                 i++;
  78.                 a=b;
  79.                 fa=fb;
  80.                 b=p;
  81.                 fb=fx(p);
  82.         }
  83.  
  84. }
  85.  
  86.  
  87.  
  88. int main(void)
  89. {
  90.         Secant_Method(0.4,0.5);
  91.         return 1;
  92. }