Advertisement
adwas33

Untitled

Nov 18th, 2022
22
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.90 KB | None | 0 0
  1. solution Rosen(matrix x0, matrix s0, double alfa, double beta, double epsilon, int Nmax, matrix O)
  2. {
  3. //alfa >0
  4. //beta<0
  5. int* n = get_size(x0);
  6. matrix l(n[0], 1), p(n[0], 1), s(s0);
  7. matrix D(n[0], n[0]); //macierz kierunku
  8. for (int i = 0; i < n[0]; i++) {
  9. D(i, i) = 1;
  10. }
  11. solution X, Xt;
  12. X.x = x0;
  13. // X.fit_fun();
  14. while (true)
  15. {
  16. //cout << X.x(0) << "\n" << X.x(1) << endl;
  17. for (int i = 0; i < n[0]; ++i)
  18. {
  19. Xt.x = X.x + s(i) * D[i];
  20. // Xt.fit_fun();
  21. if (Xt.y < X.y)
  22. {
  23. X = Xt;
  24. l(i) += s(i);
  25. s(i) *= alfa;
  26. }
  27. else
  28. {
  29. p(i) += 1;
  30. s(i) *= (-beta);
  31. }
  32. }
  33. bool change = true;
  34. for (int i = 0; i < n[0]; ++i)
  35. if (l(i) != 0 || p(i) != 0) // l || p
  36. {
  37. change = false;
  38. break;
  39. }
  40. if (change)
  41. {
  42. matrix Q(n[0], n[0]), v(n[0], 1);
  43. for (int i = 0; i < n[0]; ++i)
  44. for (int j = 0; j <= i; ++j)
  45. Q(i, j) = l(i);
  46. Q = D * Q;
  47. v = Q[0] / norm(Q[0]);
  48. D. set_col(v, 0);
  49. for (int i = 1; i < n[0]; ++i)
  50. {
  51. matrix temp(n[0], 1);
  52. for (int j = 0; j < i; ++j)
  53. temp = trans(Q[j]) * D[j] * D[j];
  54. v = Q[i] - temp / norm(Q[i] - temp);
  55. D.set_col(v, i);
  56. }
  57. s = s0;
  58. l = 0;
  59. p = 0;
  60. }
  61. double max_s = abs(s(0));
  62. for (int i = 1; i < n[0]; ++i)
  63. if (max_s < abs(s(i)))
  64. max_s = abs(s(i));
  65. if (solution::f_calls > Nmax || max_s <= epsilon)
  66. return X;
  67. }
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement