Advertisement
Guest User

Untitled

a guest
Sep 22nd, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.29 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, double[][]VecNev, double[][]Acopy)
  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. /** swap row in A matrix **/
  18. double[] temp = A[k];
  19. A[k] = A[max];
  20. A[max] = temp;
  21.  
  22. /** swap corresponding values in constants matrix **/
  23. double t = B[k];
  24. B[k] = B[max];
  25. B[max] = t;
  26.  
  27. /** pivot within A and B **/
  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. double[] solution = new double[N];
  42. for (int i = N - 1; i >= 0; i--)
  43. {
  44. double sum = 0.0;
  45. for (int j = i + 1; j < N; j++)
  46. sum += A[i][j] * solution[j];
  47. solution[i] = (B[i] - sum) / A[i][i];
  48. }
  49. /** Выводим решение **/
  50. printSolution(solution);
  51.  
  52. /** Вектор невязки **/
  53. /* VectorNevyazki(A, B, solution, VecNev, Acopy); */
  54. }
  55. /** Функция для вывода матрицы в ступенчатом виде **/
  56. public void printRowEchelonForm(double[][] A, double[] B)
  57. {
  58. int N = B.length;
  59. System.out.println("\nСтупенчатый вид : ");
  60. for (int i = 0; i < N; i++)
  61. {
  62. for (int j = 0; j < N; j++)
  63. System.out.printf("%.3f ", A[i][j]);
  64. System.out.printf("| %.3f\n", B[i]);
  65. }
  66. System.out.println();
  67. }
  68.  
  69. /**вектор невязки
  70. public void VectorNevyazki(double[][] A, double[] B, double[] sol, double[][]VecNev, double[][]Acopy)
  71. {
  72. int N = B.length;
  73. float temp=0;
  74. for (int i=0; i< N; i++)
  75. {
  76. for(int j=0; j<N; j++){
  77. temp+=(sol[j]*Acopy[i][j]);
  78. VecNev[i][0]=temp;
  79. }
  80. temp=0;
  81. }
  82. for(int i=0; i<N;i++){
  83. System.out.println(VecNev[i][0]);
  84. }
  85. for(int i=0; i<N;i++){
  86. System.out.println(VecNev[i][1]);
  87. }
  88. } **/
  89.  
  90.  
  91.  
  92.  
  93. /** функция для печати решения **/
  94. public void printSolution(double[] sol)
  95. {
  96. int N = sol.length;
  97. System.out.println("\nРешение : ");
  98. for (int i = 0; i < N; i++)
  99. System.out.printf("%.3f ", sol[i]);
  100. System.out.println();
  101. }
  102. /** точка входа **/
  103. public static void main (String[] args)
  104. {
  105. Scanner scan = new Scanner(System.in);
  106. Main ge = new Main();
  107.  
  108. System.out.println("\nВведите кол-во строк");
  109. int N = scan.nextInt();
  110.  
  111. double[] B = new double[N];
  112. double[][] A = new double[N][N];
  113. double[][] VecNev = new double[N][2];
  114. double[][] Acopy= new double[N][N];
  115.  
  116. System.out.println("\nВведите "+ N +" КОЭФФИЦИЕНТОВ(матрица коэффициентов) ");
  117. for (int i = 0; i < N; i++)
  118. for (int j = 0; j < N; j++)
  119. A[i][j] = scan.nextDouble();
  120. System.arraycopy(A, 0, Acopy, 0, A.length);
  121. System.out.println("\nВведите "+ N +" свободные члены");
  122. for (int i = 0; i < N; i++) {
  123. B[i] = scan.nextDouble();
  124. VecNev[i][1]=B[i];
  125. }
  126.  
  127. /* for (int j = 0; j < Acopy.length; j++) {
  128. for (int k = 0; k < Acopy[0].length; k++) {
  129. System.out.print(Acopy[j][k] + " ");
  130. }
  131. System.out.print("\n");
  132. } */
  133.  
  134. ge.solve(A,B, VecNev, Acopy);
  135. }
  136. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement