Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Odwracanie macierzy
--LoginX--
post
Post #1





Goście







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. ?>
Go to the top of the page
+Quote Post

Posty w temacie
- -LoginX-   Odwracanie macierzy   19.02.2008, 17:11:53
- - LoginX    i gitara   28.02.2008, 20:12:43
- - mike   Class: Matrix   29.02.2008, 01:12:14


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 20:37