Jest typ zespolony oparty na Variant.
Czy na pewno jest juz w D4?
Szczerze mówiąc nie wiem. To jedyne Delphi, którego nie miałem (nie licząc D7).
A wracając do obliczania wyznacznika macierzy. Podany wzór rekurencyjny jest oczywiście jak najbardziej prawidłowy, ale jeżeli chodzi o jego złożoność to jest fatalny. Można wyznacznik obliczyć szybciej. Trzeba tylko skorzystać z kilku własności wyznaczników.
- Jeżeli wszystkie elementy wyznacznika leżące poniżej (lub powyżej) głównej przekątnej są równe 0 to wartość wyznacznika jest równa iloczynowi elementów leżących na głównej przekątnej.
- Wartość wyznacznika nie zmienia się, jeżeli do danego wiersza (lub kolumny) dodamy kombinację liniową innego wiersza (lub kolumny). Dzięki temu możemy skorzystać z metody Gaussa.
Jeżeli mamy wyznacznik:
1 2 3 4 5 w1
4 2 1 6 8 w2
1 3 6 8 9 w3
1 3 6 8 0 w4
9 0 3 1 4 w5
To możemy kombinację liniową pierwszego wiersza odjąć od pozostałych.
Wykonajmy następujące operacje.
w2 - w14
w3 - w1
w4 - w1
w5 - w19
Otrzymamy:
1 2 3 4 5 w1
0 -2 -11 -10 -12 w2
0 1 3 4 4 w3
0 1 3 4 -20 w4
0 -18 -24 -35 -41 w5
Dalej możemy drugi wiersz odjąć od następnych:
w3 + w20.5
w3 + w20.5
w3 - w29
Otrzymamy:
1 2 3 4 5 w1
0 -2 -11 -10 -12 w2
0 0 2.5 -1 -2 w3
0 0 2.5 -1 -26 w4
0 0 73 55 67 w5
Dalej 3 wiersz od następnych:
w4 - w3
w5 - w329.2
1 2 3 4 5 w1
0 -2 -11 -10 -12 w2
0 0 2.5 -1 -2 w3
0 0 0 0 -24 w4
0 0 0 84.2 125.4 w5
Teraz możemy przestawić wiersz w4 i w5 zmieniając znak wyznacznika
-1*
1 2 3 4 5 w1
0 -2 -11 -10 -12 w2
0 0 2.5 -1 -2 w3
0 0 0 84.2 125.4 w5
0 0 0 0 -24 w4
I wymnożyć elementy po przekątnej:
-11(-2)2.584.2*(-24) = -10 104
I gdybym się nie pomylił (a przy takich obliczeniach prawie zawsze się mylę) to to byłby prawidłowy wynik. Na szczęście komputer się nie myli :)
--
Jest jeszcze jeden błąd ... :)
--------Oficjalny kanał----------
Service for programmers w IRC: #4programmers, warszawa.ircnet.pl (POLNet)