Advertisement
Guest User

Untitled

a guest
Oct 21st, 2019
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.32 KB | None | 0 0
  1. import java.util.Scanner;
  2. import java.util.Arrays;
  3.  
  4. public class Main
  5. {
  6. public void solve(double[][] A, double[] B)
  7. {
  8. int N = B.length;
  9. for (int k = 0; k < N; k++)
  10. {
  11. /** поиск опорного элемента **/
  12. int max = k;
  13. for (int i = k + 1; i < N; i++)
  14. if (Math.abs(A[i][k]) > Math.abs(A[max][k]))
  15. max = i;
  16.  
  17. /** приводим матрицу к треугольному виду **/
  18. double[] temp = A[k];
  19. A[k] = A[max];
  20. A[max] = temp;
  21.  
  22.  
  23. double t = B[k];
  24. B[k] = B[max];
  25. B[max] = t;
  26.  
  27.  
  28. for (int i = k + 1; i < N; i++)
  29. {
  30. double factor = A[i][k] / A[k][k];
  31. B[i] -= factor * B[k];
  32. for (int j = k; j < N; j++)
  33. A[i][j] -= factor * A[k][j];
  34. }
  35. }
  36.  
  37. /** Выводим матрицу в ступенчатом виде **/
  38. printRowEchelonForm(A, B);
  39.  
  40.  
  41.  
  42. /** Обратный ход **/
  43. double[] solution = new double[N];
  44. for (int i = N - 1; i >= 0; i--)
  45. {
  46. double sum = 0.0;
  47. for (int j = i + 1; j < N; j++)
  48. sum += A[i][j] * solution[j];
  49. solution[i] = (B[i] - sum) / A[i][i];
  50. }
  51. /** Выводим решение **/
  52. printSolution(solution);
  53. /** Вектор невязки **/
  54. double[] neviaz = new double[A.length];
  55. for (int i = 0; i < A.length; i++) {
  56. double sum = 0;
  57. for (int j = 0; j < A.length; j++) {
  58. sum += A[i][j] * solution[j];
  59. }
  60. neviaz[i] =B[i] - sum;
  61. }
  62. System.out.println("\nНевязки: ");
  63. for (double v : neviaz) {
  64. System.out.printf("%.20f\n", v);
  65. }
  66.  
  67.  
  68. }
  69. /** Функция для вывода матрицы в ступенчатом виде **/
  70. public void printRowEchelonForm(double[][] A, double[] B)
  71. {
  72. int N = B.length;
  73. System.out.println("\nСтупенчатый вид : ");
  74. for (int i = 0; i < N; i++)
  75. {
  76. for (int j = 0; j < N; j++)
  77. System.out.printf("%.3f ", A[i][j]);
  78. System.out.printf("| %.3f\n", B[i]);
  79. }
  80. System.out.println();
  81. }
  82.  
  83.  
  84.  
  85.  
  86.  
  87.  
  88. /** функция для печати решения **/
  89. public void printSolution(double[] sol)
  90. {
  91. int N = sol.length;
  92. System.out.println("\nРешение : ");
  93. for (int i = 0; i < N; i++)
  94. System.out.printf("%.3f ", sol[i]);
  95. System.out.println();
  96. }
  97. /** точка входа **/
  98. public static void main (String[] args)
  99. {
  100. Scanner scan = new Scanner(System.in);
  101. Main ge = new Main();
  102.  
  103. int N = 5;
  104.  
  105. double[][] A={
  106. {0.405, 0.05, 0.04, 0, 0.09},
  107. {-0.061, 0.53, 0.073, 0.11, -0.06},
  108. {0.07, -0.036, 0.38, 0.03, 0.02},
  109. {-0.05, 0, 0.066, 0.58, 0.23},
  110. {0, 0.081, -0.05, 0, 0.41}
  111. };
  112. double[] B = {1.065, 0.975, -1.312, 1.096, -0.048};
  113.  
  114.  
  115. ge.solve(A,B);
  116. }
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement