Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.company;
- import java.io.*;
- import java.text.DecimalFormat;
- import java.text.NumberFormat;
- import java.util.Arrays;
- import java.util.StringTokenizer;
- @SuppressWarnings("All")
- public class Jacobi {
- public static final int Max_Iter = 100;
- private double[][] M;
- public Jacobi(double[][] matrix) {
- M = matrix;
- }
- public void print() {
- System.out.println();
- int n = M.length;
- System.out.println("Współczynniki wolne wraz z wektorem:");
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < n + 1; j++)
- System.out.print(M[i][j] + " ");
- System.out.println();
- }
- }
- public void solve() {
- int iterations = 0;
- int n = M.length;
- double epsilon = 1e-15;
- double[] X = new double[n];
- double[] P = new double[n];
- Arrays.fill(X, 0);
- Arrays.fill(P, 0);
- System.out.println("\nWektor rozwiązania:");
- while (true) {
- for (int i = 0; i < n; i++) {
- double sum = M[i][n]; // B[n]
- for (int j = 0; j < n; j++)
- if (j != i)
- sum -= M[i][j] * P[j];
- // Uaktualnienie X[i], nie jest używany w kolejnym wierszu
- // a w kolejnej iteracji metody
- X[i] = 1 / M[i][i] * sum;
- }
- System.out.print("X_" + iterations + " = { ");
- for (int i = 0; i < n; i++)
- System.out.print(X[i] + " ");
- System.out.println("}");
- iterations++;
- if (iterations == 1) continue;
- boolean stop = true;
- for (int i = 0; i < n && stop; i++)
- if (Math.abs(X[i] - P[i]) > epsilon)
- stop = false;
- if (stop || iterations == Max_Iter) break;
- P = (double[]) X.clone();
- }
- }
- public static void main(String args[]) throws IOException {
- // Pobranie od użytkownika wielkości układu równań
- String naglowek =
- "----------------\nMetoda Jacobiego \n" +
- "----------------\n" +
- "Rozwiązanie układu n-równań z n-niewiadomymi Ax=b\n" +
- "Podaj wielkość układu (n)";
- System.out.println(naglowek);
- int n;
- double[][] M;
- BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
- n = Integer.parseInt(reader.readLine());
- if (n < 1) {
- System.out.println("Nieprawidłowa wartość parametru n");
- return;
- }
- System.out.println("Podaj elementy macierzy współczynników " +
- "wraz z wektorem wyrazów wolnych");
- M = new double[n][n + 1];
- long startTime = System.currentTimeMillis();
- for (int i = 0; i < n; i++) {
- StringTokenizer strtk = new StringTokenizer(reader.readLine());
- while (strtk.hasMoreTokens())
- for (int j = 0; j < n + 1 && strtk.hasMoreTokens(); j++)
- M[i][j] = Integer.parseInt(strtk.nextToken());
- }
- Jacobi jacobi = new Jacobi(M);
- jacobi.print();
- jacobi.solve();
- System.out.println();
- long endTime = System.currentTimeMillis();
- NumberFormat formatter = new DecimalFormat("#0.00000");
- System.out.println("Czas wykonania obliczeń to " + formatter.format((endTime - startTime) / 1000d) + " milisekund");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement