Advertisement
JeeyVee

Untitled

Jan 18th, 2020
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.55 KB | None | 0 0
  1. public void solve() {
  2.         int    n       = M.length;
  3.         double mi      = 1.0;
  4.         double[] X_k       = new double[n];
  5.         double[] X_k_1     = null;
  6.         double[] X_k_2     = null;
  7.         double[] R_new     = null;
  8.         double[] R_k       = null;
  9.         double[] R_k_1     = null;
  10.         double[] delta_R_k = null;
  11.         Arrays.fill(X_k, 0);
  12.  
  13.         AtomicLong startTime = new AtomicLong(System.nanoTime());
  14.  
  15.         for (int k = 0; k < Max_Iter; k++) {
  16.             if(R_k_1 != null) R_k_1 = R_k.clone();
  17.             if(X_k_1 != null) X_k_2 = X_k_1.clone();
  18.             X_k_1 = X_k.clone();
  19.  
  20.             for (int i = 0; i < n; i++) {
  21.                 double x_i = 0;
  22.                 for (int j = 0; j < n; j++) {
  23.                     if (i != j) {
  24.                         x_i -= X_k[j] * M[i][j] / M[i][i];
  25.                     }
  26.                 }
  27.                 X_k[i] = x_i + M[i][n] / M[i][i];
  28.             }
  29.             if (k >= 1)
  30.                 R_new = diff(X_k, X_k_1);
  31.             if (k >= 2) {
  32.                 R_k_1 = diff(X_k_1, X_k_2);
  33.                 delta_R_k = diff(R_new, R_k_1);
  34.                 R_k = sum(R_k_1, mul(mi, delta_R_k));
  35.                 mi = 1 - (dot(R_k, delta_R_k) / dot(delta_R_k, delta_R_k));
  36.  
  37.                 for (int i = 0; i < n; i++) {
  38.                     X_k[i] = X_k_1[i] + mi * (X_k[i] - X_k_1[i]);
  39.                 }
  40.             }
  41.             if (check_stop_condition(X_k, X_k_1, k, startTime.get())) {
  42.                 continue;
  43.             }
  44.             return;
  45.         }
  46.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement