Advertisement
adwas33

Untitled

Dec 22nd, 2022
26
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.87 KB | None | 0 0
  1. ////metoda gradientów sprzężonych
  2. solution CG(matrix x0, double h0, double epsilon, int Nmax, matrix* ud, matrix* ad) {
  3. int n = get_len(x0);
  4. solution X, X1;
  5. X.x = x0;
  6. matrix d(n, 1), * P = new matrix[2];
  7. solution h;
  8. double* ab, beta;
  9. X.grad();
  10. //d0 jest rowne gradientowi
  11. d = -X.g;
  12. while (true) {
  13. if (h0 < 0) {
  14. P[0] = X.x;
  15. P[1] = d;
  16. ab = expansion(0, 1, 1.2, Nmax, ud, P);
  17. h = golden(ab[0], ab[1], epsilon, Nmax, ud, P);
  18. X1.x = X.x - h.x * d;
  19. }
  20. else
  21. X1.x = X.x + h0 * d;
  22. #if LAB_NO == 5 && LAB_PART == 2
  23. ud->add_row(trans(X1.x));
  24. #endif
  25. if (norm(X.x - X1.x) < epsilon || solution::f_calls > Nmax || solution::g_calls > Nmax) {
  26. X1.fit_fun(ud);
  27. return X1;
  28. }
  29. X1.grad();
  30. // betda do okreslania kolejnych wartosci kierunku
  31. beta = pow(norm(X1.g), 2) / pow(norm(X.g), 2);
  32. d = -X1.g + beta * d;
  33. X = X1;
  34. }
  35. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement