Advertisement
Guest User

Wolfe_unknown_quality

a guest
Apr 26th, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.03 KB | None | 0 0
  1. double QNM::Wulf(vect xk, vect dk)
  2. {
  3.     double eps1 = 1E-4, eps2 = 5E-1, alpha = 1, a_bot = 0, a_top = 0;
  4.     double thet1 = 1.1, thet2 = 0.5, scal = d_f(xk, dim).scal_mul(dk);
  5.     vect xk_adk(dim);
  6.  
  7.     int stop_index = 0;
  8.     while (stop_index < 1E3)//1E4
  9.     {
  10.         stop_index++;
  11.         xk_adk = (dk*alpha) + xk;
  12.         /*
  13.         cout << xk[0]<<" " << xk[1] <<"||" << xk_adk[0] << " " << xk_adk[1]
  14.         <<"|(1)|" << f_x(xk_adk) - f_x(xk) - eps1 * alpha * scal
  15.         <<"|(2)|" << d_f(xk_adk, dim).scal_mul(dk) - eps2 * scal <<"\n";
  16.         */
  17.         if (f_x(xk_adk) - f_x(xk) - eps1 * alpha * scal < 0) // с вешественным нулем все только хуже.
  18.         {
  19.             double check1 = d_f(xk_adk, dim).scal_mul(dk) - eps2 * scal;
  20.             if (d_f(xk_adk, dim).scal_mul(dk) - eps2 * scal > 0)
  21.             {
  22.                 break;
  23.             }
  24.             else
  25.             {
  26.                 a_bot = alpha;
  27.                 if (abs(a_top) < 0)
  28.                 {
  29.                     alpha *= thet1;
  30.                 }
  31.             }
  32.         }
  33.         else
  34.         {
  35.             a_top = alpha;
  36.             alpha = (1 - thet2)*a_bot + thet2*a_top;
  37.  
  38.         }
  39.     }
  40.     cout<<"Wulf_iterations = " << stop_index << "\n";
  41.     return alpha;
  42. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement