title: Golden section search
body: <p>I am trying to find the maximum value in function <code>zt</code> between <code>tl</code>=0 and <code>tu</code>=10 but the code is not working to find the maximum value. What is wrong with my code?</p>
  
  <pre><code>#include &lt;stdio.h&gt;
  #include &lt;math.h&gt;
  
  #define e 2.718281828459
  
  double zt(double t)
  {
      return (100 + (80 / 15)* (55 + 80*9.81 / 15) * (1 - pow(e, -(15/80)*t)) - (80*9.81 / 15)*t);
  }
  
  
  
  void Golden(double tl, double tu)
  {
      int i;                              //이터레이션 i
      int imax = 100;                 //i가 무한히 반복되지 않도록 max값 설정
      double es = 0.01;   //상대오차가 충분히 작아졌을때 중단하기 위한 es 설정
      long double t1 = tl + (tu - tl)*((pow(5,0.5) - 1) / 2);
      long double t2 = tu - (tu - tl)*((pow(5,0.5) - 1) / 2);
      long double pz;    
      long double pzold = 0;
      double pt;
      long double ea;                     // 상대오차
  
      printf("Golden Section Search \n");
  
      for (i = 1; i &lt;= imax; i++)
      {
  
          if (zt(t1) &gt; zt(t2))
          {
              pz = zt(t1);
              pt = t1;
          }
  
          else if (zt(t2)&gt;zt(t1))
          {
              pz = zt(t2);
              pt = t2;
          }
  
          ea = fabs((tu - tl) / pt) * 100; //
  
          printf("iteration=%d Peak altitude=%.10f Peak Time=%.10f Error=%.15f\n", i, pz, pt, ea);
  
          pzold = pz;                 //xrold 값을 xr 로 설정하여 다음 이터레이션의 상대오차를 구하기위해 정의한다
  
          if (ea &lt; es)
          {
              break;              //ea가 es보다 작아질 경우 xr이 근에 충분히 근접하였으므로 중단
          }
  
  
          if (zt(t1)&gt;zt(t2))          //조건문으로 함수 f(xr)의 음수 양수 판단후 다음 iteration 에서의 xu, xl 값 설정
          {
              tl = t2;
              t2 = t1;
              t1= tl + fabs(tu - tl)*((pow(5,0.5) - 1) / 2);
          }  
  
          else if (zt(t2)&gt;zt(t1))
          {
              tu = t1;
              t1 = t2;
              t2= tu - fabs(tu - tl)*((pow(5,0.5) - 1) / 2);
          }
  
  
      }
  
  }
  
  int main(void)
  {
      Golden(0, 10);
  
      return 0;
  }
  </code></pre>