Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Odwracanie macierzy
Forum PHP.pl > Forum > Przedszkole
-LoginX-
Witam, tworzę aplikację do pracy licencjackiej w której ważną rolę odgrywa odwracanie macierzy o dowolnym rozmiarze (oczywiście kwadratową). Poniżej zamiszczam mój pomysł, jakkolwiek nie jest on idealny ale już cos. Główny problem to wywalanie błędu Division by zero. często zdarza się że wyznacznik jest ekstremalnie bliski zeru, jednak zakres tybu zmiennej tego nie obejmuje i nie wystarcza wprowadzenie sprawdzania cz wartośc jest różna od zera.

Kod:

  1. <?php
  2. // pobieranie z bazy danych macierzy zaczcyna od drugiej kolumny bo pierwsza to in
    deks wierszy
  3.  
  4. $kwerenda = 'select k1';
  5. for($i=2;$i<=$size;$i++)
  6. {
  7. $kwerenda=$kwerenda.', k'.$i;
  8. }
  9.  
  10. $kwerenda=$kwerenda.' from XTX'.$gen.';';
  11. $kwerenda = mysql_query($kwerenda);
  12. $i=1;
  13. while ($array = mysql_fetch_array($kwerenda))
  14. {
  15. $t=0;
  16. for($j=1;$j<=$size;$j++)
  17. {
  18. //echo $array[$t];
  19. $A[$i][$j]=$array[$t];
  20. $t=$t+1;
  21. }
  22. $i=$i+1;
  23. }
  24. mysql_free_result($kwerenda);
  25.  
  26.  
  27. // uzupełnianie tablicy o macierz jednostkową
  28.  
  29. for($i=1;$i<=$size;$i++)
  30. {
  31. for($j=$size+1;$j<=$size*2;$j++)
  32. {
  33. $c=$j-$size;
  34. if ($i<>$c)
  35. {
  36. $A[$i][$j]=0;
  37. }
  38. if ($i==$c)
  39. {
  40. $A[$i][$j]=1;
  41. }
  42. }
  43. }
  44.  
  45. // uproszczone odwracanie na podstawie eliminacja Gaussa-Jordana
  46.  
  47.  
  48. for($x=1;$x<=$size;$x++)
  49. {
  50. $Akw=$A[$x][$x];
  51. for($j=$x;$j<=$size*2;$j++)
  52. {
  53. $A[$x][$j]=$A[$x][$j]/$Akw;
  54. }
  55.  
  56.  
  57. for($i=1;$i<=$size;$i++)
  58. {
  59. $Akw=$A[$i][$x];
  60. for($j=1;$j<=$size*2;$j++)
  61. {
  62. if($i<>$x)
  63. {
  64. $A[$i][$j]=$A[$i][$j]-$Akw*$A[$x][$j];
  65. }
  66. }
  67. }
  68. }
  69.  
  70. // wyniki do nowej tabeli
  71.  
  72. for($i=1;$i<=$size;$i++)
  73. {
  74. for($j=1;$j<=$size;$j++)
  75. {
  76. $kwerenda='UPDATE XTXodw'.$gen.' SET k'.$j.'='.$A[$i][$j+$size].' where w='.$i.';';
  77. mysql_query($kwerenda);
  78. }
  79. }
  80. ?>
LoginX
guitar.gif  i gitara party.gif
mike
Class: Matrix
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.