2009-07-20 16 views

Antwort

2

Eine Möglichkeit, die Determinante wird unter Verwendung der LU-Zerlegung zu berechnen:

LaVectorLongInt pivots(A.cols()); 

    LUFactorizeIP(A, pivots); 

    double detA = 1; 
    for (int i = 0; i < A.cols(); ++i) 
    detA *= A(i, i); 

Warnung, A wird sich ändern, so dass eine Kopie erstellt wird wahrscheinlich beraten.

+0

Ich akzeptiere diese Antwort jetzt als akzeptiert, weil keine anderen Optionen zur Verfügung gestellt wurden. Wenn jemand eine andere (gute, akzeptable) Lösung hinzufügt, werde ich diese Antwort akzeptieren. –

+0

Ich denke, dass Sie auch ein negatives Vorzeichen benötigen, wenn Sie eine ungerade Anzahl von Permutationen haben (Pivot-Größe ist ungerade). Siehe auch: http://icl.cs.utk.edu/lapack-forum/viewtopic.php?p=341&#p336 –

+0

Die Faktorisierung ist 'A = PLU'. Hier hat L die Diagonalen, also det (L) = 1. Nun ist det (A) = det (P) · det (L) · det (U) = det (P) · 1 · det (U). In dem obigen Code wird das Vorzeichen der Permutationsmatrix "P" (dargestellt als ein Array von Pivots) nicht behandelt. – soegaard

0

Ich weiß nicht über lapack ++, aber ich bin sicher, dass es nicht in Standard lapack, check. Soweit ich weiß, implementiert lapack ++ die matriciale Operation nicht selbst, sondern benutzt andere, tatsächlich kann man zwischen mehreren wechseln (Atlas, mkl (Intel Math Kernel Library) usw.). Daher gehe ich davon aus, dass es auch in lapack ++ irgendeine determinante Operation gibt.

+0

Lapack ++ enthält alle BLAS-Operationen. Es gibt keine bestimmende Funktion in BLAS, aber es gibt wahrscheinlich andere Methoden, die verwendet werden können, um die Determinante zu erhalten. –

+0

Entschuldigung, ich habe Ihre Frage missverstanden. Ich habe das schlechte Karma verdient :-). –