Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Odwracanie macierzy
--LoginX--
post 19.02.2008, 17:11:53
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
 
Start new topic
Odpowiedzi (1 - 2)
LoginX
post 28.02.2008, 20:12:43
Post #2





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 19.02.2008

Ostrzeżenie: (0%)
-----


guitar.gif  i gitara party.gif
Go to the top of the page
+Quote Post
mike
post 29.02.2008, 01:12:14
Post #3





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


Class: Matrix
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 18.07.2025 - 02:25