Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public void solve() {
- int n = M.length;
- double mi = 1.0;
- double[] X_k = new double[n];
- double[] X_k_1 = null;
- double[] X_k_2 = null;
- double[] R_new = null;
- double[] R_k = null;
- double[] R_k_1 = null;
- double[] delta_R_k = null;
- Arrays.fill(X_k, 0);
- AtomicLong startTime = new AtomicLong(System.nanoTime());
- for (int k = 0; k < Max_Iter; k++) {
- if(R_k_1 != null) R_k_1 = R_k.clone();
- if(X_k_1 != null) X_k_2 = X_k_1.clone();
- X_k_1 = X_k.clone();
- for (int i = 0; i < n; i++) {
- double x_i = 0;
- for (int j = 0; j < n; j++) {
- if (i != j) {
- x_i -= X_k[j] * M[i][j] / M[i][i];
- }
- }
- X_k[i] = x_i + M[i][n] / M[i][i];
- }
- if (k >= 1)
- R_new = diff(X_k, X_k_1);
- if (k >= 2) {
- R_k_1 = diff(X_k_1, X_k_2);
- delta_R_k = diff(R_new, R_k_1);
- R_k = sum(R_k_1, mul(mi, delta_R_k));
- mi = 1 - (dot(R_k, delta_R_k) / dot(delta_R_k, delta_R_k));
- for (int i = 0; i < n; i++) {
- X_k[i] = X_k_1[i] + mi * (X_k[i] - X_k_1[i]);
- }
- }
- if (check_stop_condition(X_k, X_k_1, k, startTime.get())) {
- continue;
- }
- return;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement