Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Scanner;
- import java.util.Arrays;
- public class Main
- {
- public void solve(double[][] A, double[] B)
- {
- int N = B.length;
- for (int k = 0; k < N; k++)
- {
- /** поиск опорного элемента **/
- int max = k;
- for (int i = k + 1; i < N; i++)
- if (Math.abs(A[i][k]) > Math.abs(A[max][k]))
- max = i;
- /** приводим матрицу к треугольному виду **/
- double[] temp = A[k];
- A[k] = A[max];
- A[max] = temp;
- double t = B[k];
- B[k] = B[max];
- B[max] = t;
- for (int i = k + 1; i < N; i++)
- {
- double factor = A[i][k] / A[k][k];
- B[i] -= factor * B[k];
- for (int j = k; j < N; j++)
- A[i][j] -= factor * A[k][j];
- }
- }
- /** Выводим матрицу в ступенчатом виде **/
- printRowEchelonForm(A, B);
- /** Обратный ход **/
- double[] solution = new double[N];
- for (int i = N - 1; i >= 0; i--)
- {
- double sum = 0.0;
- for (int j = i + 1; j < N; j++)
- sum += A[i][j] * solution[j];
- solution[i] = (B[i] - sum) / A[i][i];
- }
- /** Выводим решение **/
- printSolution(solution);
- /** Вектор невязки **/
- double[] neviaz = new double[A.length];
- for (int i = 0; i < A.length; i++) {
- double sum = 0;
- for (int j = 0; j < A.length; j++) {
- sum += A[i][j] * solution[j];
- }
- neviaz[i] =B[i] - sum;
- }
- System.out.println("\nНевязки: ");
- for (double v : neviaz) {
- System.out.printf("%.20f\n", v);
- }
- }
- /** Функция для вывода матрицы в ступенчатом виде **/
- public void printRowEchelonForm(double[][] A, double[] B)
- {
- int N = B.length;
- System.out.println("\nСтупенчатый вид : ");
- for (int i = 0; i < N; i++)
- {
- for (int j = 0; j < N; j++)
- System.out.printf("%.3f ", A[i][j]);
- System.out.printf("| %.3f\n", B[i]);
- }
- System.out.println();
- }
- /** функция для печати решения **/
- public void printSolution(double[] sol)
- {
- int N = sol.length;
- System.out.println("\nРешение : ");
- for (int i = 0; i < N; i++)
- System.out.printf("%.3f ", sol[i]);
- System.out.println();
- }
- /** точка входа **/
- public static void main (String[] args)
- {
- Scanner scan = new Scanner(System.in);
- Main ge = new Main();
- int N = 5;
- double[][] A={
- {0.405, 0.05, 0.04, 0, 0.09},
- {-0.061, 0.53, 0.073, 0.11, -0.06},
- {0.07, -0.036, 0.38, 0.03, 0.02},
- {-0.05, 0, 0.066, 0.58, 0.23},
- {0, 0.081, -0.05, 0, 0.41}
- };
- double[] B = {1.065, 0.975, -1.312, 1.096, -0.048};
- ge.solve(A,B);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement