Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- double QNM::Wulf(vect xk, vect dk)
- {
- double eps1 = 1E-4, eps2 = 5E-1, alpha = 1, a_bot = 0, a_top = 0;
- double thet1 = 1.1, thet2 = 0.5, scal = d_f(xk, dim).scal_mul(dk);
- vect xk_adk(dim);
- int stop_index = 0;
- while (stop_index < 1E3)//1E4
- {
- stop_index++;
- xk_adk = (dk*alpha) + xk;
- /*
- cout << xk[0]<<" " << xk[1] <<"||" << xk_adk[0] << " " << xk_adk[1]
- <<"|(1)|" << f_x(xk_adk) - f_x(xk) - eps1 * alpha * scal
- <<"|(2)|" << d_f(xk_adk, dim).scal_mul(dk) - eps2 * scal <<"\n";
- */
- if (f_x(xk_adk) - f_x(xk) - eps1 * alpha * scal < 0) // с вешественным нулем все только хуже.
- {
- double check1 = d_f(xk_adk, dim).scal_mul(dk) - eps2 * scal;
- if (d_f(xk_adk, dim).scal_mul(dk) - eps2 * scal > 0)
- {
- break;
- }
- else
- {
- a_bot = alpha;
- if (abs(a_top) < 0)
- {
- alpha *= thet1;
- }
- }
- }
- else
- {
- a_top = alpha;
- alpha = (1 - thet2)*a_bot + thet2*a_top;
- }
- }
- cout<<"Wulf_iterations = " << stop_index << "\n";
- return alpha;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement