Angenommen, ich habe eine Liste von Matrizen, die in der Variablen G
gespeichert sind, und wende folgende Operationen an:
Minors
gibt eine Matrix zurück, in der jedes Element die Determinante mit der gelöschten (i, j) -Zeile / Spalte ist, und Diagonal
gibt eine Liste der diagonalen Elemente einer Matrix zurück.
Meine Frage betrifft die Auswertung dieser Befehle - klar will ich nicht, dass alle Einträge ausgewertet werden. Ist Mathematica faul in dem Sinne, dass zuerst Diagonal geparst wird, das nur die Elemente extrahiert, die von Minors benötigt werden, oder wird die Nebenmatrix konstruiert und dann werden ihre diagonalen Elemente herausgezogen?
Dies ist eine allgemeine Frage für eine faule Bewertung, aber für Mathematica neu zu sein, würde ich mich über alle Tipps freuen, wie man die Syntax für das spezifische Problem verbessern kann.
Es ist spät, also nur eine kurze Antwort: untersuchen Sie Hold[]
und seine Verwandten. Mit ihnen können Sie faul auswertende Funktionen implementieren. Die meisten intrinsischen Mathematica-Funktionen sind nicht faul, ein paar sind es auch. Im Allgemeinen solltest du es als Anfänger vermeiden, das Verhalten der intrinsischen Funktionen von Mathematica zu ändern, obwohl es sehr viel Spaß macht und sehr leicht das ganze System unbrauchbar machen kann.
Es ist spät, also nur eine kurze Antwort: untersuchen Sie Det
und seine Verwandten. Mit ihnen können Sie faul auswertende Funktionen implementieren. Die meisten intrinsischen Mathematica-Funktionen sind nicht faul, ein paar sind es auch. Im Allgemeinen solltest du es als Anfänger vermeiden, das Verhalten der intrinsischen Funktionen von Mathematica zu ändern, obwohl es sehr viel Spaß macht und sehr leicht das ganze System unbrauchbar machen kann.
Kein Mathematiker ist generell nicht faul.
%Vor%Erstellt eine Matrix, auf der Diagonal arbeiten wird. Da Minors nicht auf einzelnen Elementen der Matrix operiert, ist das, wonach du fragst, meines Wissens nicht nur eine faule Bewertung.
Ich denke aber, ich habe eine Lösung für Sie.
%Vor%Diese Lösung erzeugt nur die Minors der diagonalen Elemente, die von Diagonal summiert werden. Aber ich habe die überschüssige Berechnung nur in ein Problem mit überschüssigem Speicherverbrauch verschoben. Da die Submatrix von Off-Diagonal-Elementen immer noch erzeugt wird, wird sie nur weggeworfen. Ich werde wieder posten, wenn ich mir einen Weg vorstelle, das auch zu verhindern.
Sie können dieses Problem lösen, indem Sie die Liste der diagonalen Minderjährigen selbst erstellen und dann M
für eine Matrix Minors
:
Dies ist ein bisschen ein Cludge, aber es ist etwa 50 mal schneller als mit Mathematica eingebaut in %code% und nur die diagonalen Elemente (getestet auf 100x100 zufällige Matrizen) abzugreifen.
Angenommen, ich habe eine Liste von Matrizen, die in der Variablen %code% gespeichert sind, und wende folgende Operationen an:
%Vor%%code% gibt eine Matrix zurück, in der jedes Element die Determinante mit der gelöschten (i, j) -Zeile / Spalte ist, und %code% gibt eine Liste der diagonalen Elemente einer Matrix zurück.
Meine Frage betrifft die Auswertung dieser Befehle - klar will ich nicht, dass alle Einträge ausgewertet werden. Ist Mathematica faul in dem Sinne, dass zuerst Diagonal geparst wird, das nur die Elemente extrahiert, die von Minors benötigt werden, oder wird die Nebenmatrix konstruiert und dann werden ihre diagonalen Elemente herausgezogen?
Dies ist eine allgemeine Frage für eine faule Bewertung, aber für Mathematica neu zu sein, würde ich mich über alle Tipps freuen, wie man die Syntax für das spezifische Problem verbessern kann.
Kein Mathematiker ist generell nicht faul.
%Vor%Erstellt eine Matrix, auf der Diagonal arbeiten wird. Da Minors nicht auf einzelnen Elementen der Matrix operiert, ist das, wonach du fragst, meines Wissens nicht nur eine faule Bewertung.
Ich denke aber, ich habe eine Lösung für Sie.
%Vor%Diese Lösung erzeugt nur die Minors der diagonalen Elemente, die von Diagonal summiert werden. Aber ich habe die überschüssige Berechnung nur in ein Problem mit überschüssigem Speicherverbrauch verschoben. Da die Submatrix von Off-Diagonal-Elementen immer noch erzeugt wird, wird sie nur weggeworfen. Ich werde wieder posten, wenn ich mir einen Weg vorstelle, das auch zu verhindern.
Tags und Links wolfram-mathematica lazy-evaluation