Guest User

Untitled

a guest
Jul 23rd, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.68 KB | None | 0 0
  1. //==================================================
  2. //== Znajduje macierz odwrotna metoda ==
  3. //== Gaussa-Jordana ==
  4. //== ==
  5. //== A - macierz wejsciowa ==
  6. //== zwraca macierz odwrotna do A ==
  7. //==================================================
  8.  
  9. static double [][] invertMatrix(double [][] A) {
  10. int wym=A.length; // wymiar macierzy
  11. double Ai[][]; // macierz odwrotna do A
  12. double skala; // skalowanie do 1.0
  13. int i,j,k,l; // indeksy w macierzy
  14. double tmp; // do zamiany elementow
  15.  
  16. // ==============================
  17. // == przygotuj macierz Ai jako =
  18. // == macierz jednostkowa =
  19. // ==============================
  20. Ai=new double[wym][wym];
  21.  
  22. for (i=0; i<wym; i++)
  23. for (j=0; j<wym; j++)
  24. if (i==j) Ai[i][j]=1.0; else Ai[i][j]=0.0;
  25.  
  26.  
  27. for (j=0; j<wym; j++) {
  28. // ====================================
  29. // = gdy 0 na przek.to zamien wiersze =
  30. // ====================================
  31. if (A[j][j]==0) {
  32. if (j==wym-1) {
  33. System.out.println("B┼é─ůd: macierz A jest osobliwa!");
  34. System.exit (-1);
  35. }
  36.  
  37. //=============================
  38. //== szukaj wiersza bez zera ==
  39. //=============================
  40. k=j;
  41. while ((k<wym-1)&&(A[k][j]==0.0)) k++;
  42.  
  43. //==========================
  44. //== zamien wiersze j<->l ==
  45. //==========================
  46. for (l=0; l<wym; l++) { // zamien wiersze
  47. tmp = A[j][l];
  48. A[j][l]=A[k][l];
  49. A[k][l]=tmp;
  50.  
  51. tmp = Ai[j][l];
  52. Ai[j][l]=Ai[k][l];
  53. Ai[k][l]=tmp;
  54. }
  55. }
  56.  
  57. // ==================================
  58. // = gdy dalej 0 to zamien kolumny =
  59. // ==================================
  60. if (A[j][j]==0.0) {
  61. //==========================
  62. //== szukaj kolumny bez 0 ==
  63. //==========================
  64. k=j; //
  65. while ((A[j][k]==0.0)&&(k<wym-1)) k++;
  66.  
  67. //==========================
  68. //== zamien kolumny j<->l ==
  69. //==========================
  70. for (l=0; l<wym;l++) { // zamien kolumny
  71. tmp=A[l][j];
  72. A[l][j]=A[l][k];
  73. A[l][k]=tmp;
  74.  
  75. tmp=Ai[l][j];
  76. Ai[l][j]=A[l][k];
  77. Ai[l][k]=tmp;
  78. }
  79. }
  80.  
  81. // ====================================
  82. // == przeskaluj wiersz zeby dostac 1 =
  83. // == na przekatnej =
  84. // ====================================
  85. skala = 1.0/A[j][j];
  86. for (l=0; l<wym; l++) {
  87. A[j][l] = A[j][l] *skala;
  88. Ai[j][l] = Ai[j][l] *skala;
  89. }
  90.  
  91. for (i=0; i<wym; i++) {
  92. // =================================
  93. // == likwiduj wszystkie elementy =
  94. // == w kolumnie procz elementu j =
  95. // =================================
  96. if (i!=j) {
  97. skala = A[i][j]/A[j][j];
  98. for (l=0; l<wym; l++) {
  99. A[i][l]=A[i][l] -A[j][l]* skala;
  100. Ai[i][l]=Ai[i][l] -Ai[j][l]* skala;
  101. }
  102. }
  103. }
  104. }
  105. return Ai;
  106. }
Add Comment
Please, Sign In to add comment