Symbolische Softwarepakete für Matrix-Ausdrücke?

36

Wir wissen, dass symmetrisch und positiv definit ist. Wir wissen, dass orthogonal ist:BAB

Frage: symmetrisch und positiv-definit? Antwort: jaBAB

Frage: Könnte uns ein Computer das gesagt haben? Antwort: Vermutlich.

Gibt es symbolische Algebrasysteme (wie Mathematica), die bekannte Fakten über Matrizen verarbeiten und verbreiten?

Edit: Um klar zu sein, stelle ich diese Frage zu abstrakt definierten Matrizen. Dh ich habe keine expliziten Einträge für und , ich weiß nur, dass sie beide Matrizen sind und bestimmte Attribute wie symetrisch, positiv definit, usw. haben.BAB

MRocklin
quelle
5
Was mir fehlt, ist Software, die Matrizen symbolisch behandelt (dh nicht als Arrays). Ich möchte in der Lage sein, über eine symmetrische Matrix zu sprechen, ohne mich über ihre Einträge ärgern zu müssen. C
JM
6
Es gibt einige Projekte, die daran arbeiten. Ich bin mit der Implementierung in SymPy vertraut. Es ist fehlerhaft, wird aber langsam aufgebaut.
MRocklin
4
Das klingt nach einem automatisierten Theorembeweis. Der Trick besteht dann darin, einen ausreichenden Satz von Axiomen in Ihre Engine aufzunehmen, damit diese dann durch automatisiertes Schließen effizient abgeleitet werden können (siehe PROLOG). Wenn ich so etwas entwerfen sollte, ist die Eigenschaft, die Sie oben zitieren, definitiv etwas, das ich als eine Tatsache / bekannte Beziehung kodieren würde, anstatt es zu versuchen. Auf der anderen Seite steht Prof. Paolo Bientinesi von der RWTH Aachen. In seiner Dissertation spricht er über die automatische Herleitung linearer Algebra-Algorithmen. Er benutzt Mathematica symbolisch. aices.rwth-aachen.de:8080/~pauldj
Lagerbaer
1
Ich kenne Paolos Zeug und die FLAME-Bibliothek. Ich glaube nicht, dass es das kann.
Matt Knepley
2
Ich stimme zu, dass Computeralgebrasysteme für Matrizen großartig wären, aber anscheinend fehlen. Ich habe ein Kopfgeld ausgesetzt, um die Chance auf eine Antwort zu erhöhen.
Memming

Antworten:

27

Bearbeiten: Dies ist jetzt in SymPy

$ isympy
In [1]: A = MatrixSymbol('A', n, n)
In [2]: B = MatrixSymbol('B', n, n)
In [3]: context = Q.symmetric(A) & Q.positive_definite(A) & Q.orthogonal(B)
In [4]: ask(Q.symmetric(B*A*B.T) & Q.positive_definite(B*A*B.T), context)
Out[4]: True

Ältere Antwort, die andere Arbeit zeigt

Nach einer Weile habe ich das gefunden.

Die aktuelle Antwort auf meine spezielle Frage lautet "Nein, es gibt kein aktuelles System, das diese Frage beantworten kann." Es gibt jedoch ein paar Dinge, die nahe zu kommen scheinen.

Zunächst wiesen Matt Knepley und Lagerbaer beide auf Arbeiten von Diego Fabregat und Paolo Bientinesi hin . Diese Arbeit zeigt sowohl die potenzielle Bedeutung als auch die Machbarkeit dieses Problems. Es ist eine gute Lektüre. Leider weiß ich nicht genau, wie sein System funktioniert oder wozu es in der Lage ist (falls jemand anderes öffentliches Material zu diesem Thema kennt, lass es mich wissen).

Zweitens gibt es eine für Mathematica geschriebene Tensor-Algebra-Bibliothek namens xAct, die Symmetrien und dergleichen symbolisch handhabt. Es macht einige Dinge sehr gut, ist aber nicht auf den Spezialfall der linearen Algebra zugeschnitten.

Drittens werden diese Regeln in einigen Bibliotheken für Coq formell niedergeschrieben , einen Assistenten zur Prüfung von Theoremen (Google-Suche nach coq linear / matrix algebra, um einige zu finden). Dies ist ein mächtiges System, das leider menschliche Interaktion zu erfordern scheint.

Nach einem Gespräch mit einigen Theorembeweisern schlagen sie vor, sich mit Logikprogrammierung (dh Prolog, das auch Lagerbaer vorschlug) für diese Art von Dingen zu befassen. Soweit ich weiß, ist dies noch nicht geschehen - ich werde vielleicht in Zukunft damit spielen.

Update: Ich habe dies mit dem Maude-System implementiert . Mein Code wird auf Github gehostet

MRocklin
quelle
1
Als ich feststellte, dass es kein gutes System gab, war mein erster Instinkt, ein Prologprogramm zu schreiben. :)
Memming
1
Ich habe unten einen Link zu einem meiner Nebenprojekte hinzugefügt, der sich mit diesem Problem befasst.
MRocklin
4

Einige symbolische Matrixberechnungen (z. B. Blockmatrix-Vervollständigung) können mit dem Paket NCAlgebra http://www.math.ucsd.edu/~ncalg/ (das unter mathematica ausgeführt wird) durchgeführt werden.

Bergman http://servus.math.su.se/bergman/ ist ein Paket in Lisp mit ähnlichen Funktionen.

Einige relevante Artikel:
http://math.ucsd.edu/~helton/osiris/COMPALG2000/ohRevisIJC.pdf
http://math.ucsd.edu/~thesis/thesis/dkronewitter/dkronewitter.pdf
http: // www. tandfonline.com/doi/abs/10.1080/00207170600882346

Arnold Neumaier
quelle
3

CAS2x23x3B

Die Frage wird dann, was ist mit einer Ndimensionalen Matrix? Vielleicht können Sie ein induktives Schema entwickeln, bei dem N-1 x N-1angenommen wird, dass für wahr ist, und dann eine neue Blockmatrix mit der Gesamtgröße erstellen, um N x Nzu beweisen, dass dies positiv, eindeutig und symmetrisch ist.

Die letzte Frage, welche Software für die Aufgabe besser geeignet ist (falls vorhanden), ist meine Erfahrung mit MATLAB/MuPadund Derive(benutze sie immer noch), und keiner von beiden kann sehr gut mit Vektoren und Matrizen umgehen. MATLABZerlegt alles in Komponenten und Derivekann deklarieren Non-scalars, wendet jedoch keine Vereinfachungsregeln auf sie an.

a×(b×c)=(ab)c(ac)b

ja72
quelle
2

Es ist schon eine Weile her, dass ich eines dieser Pakete zum letzten Mal verwendet habe, aber ich dachte, dass Sie dies in Sprachen wie Mathematica mithilfe von Behauptungen tun könnten. So etwas wie Assert [A, Symmetric] sagt Mathematica, dass A eine symmetrische Matrix ist und so weiter. Im Moment habe ich keinen Zugriff auf eines der beiden Handys, daher muss dies überprüft werden.

aeismail
quelle
1
Ich denke, Sie meinen den Mathematica-Befehl Assumingstatt Assert. AssumingDiese Annahmen werden angewendet, wenn ein Ausdruck vereinfacht oder integriert wird. In der Dokumentation ist jedoch nicht klar, ob Matrixeigenschaften weitergegeben werden. Ich vermute, dass solche Eigenschaften nicht durch symbolische Berechnungen übertragen werden.
Geoff Oxberry
Das könnte wahr sein. Wie ich schon sagte, das war vor Äonen (damals in meinen Schuljahren). Aber ich erinnere mich, dass ich so etwas einmal tun konnte. (Vielleicht war es mit MuPad, wie es in Scientific WorkPlace implementiert wurde.) Aber ich habe keinen Zugriff mehr auf SWP, um dies zu überprüfen (nur Windows, und ich habe keinen Emulator auf meiner Box).
Aeismail
MuPAD ist jetzt Teil von Matlab. Gemäß der Dokumentation ähnelt die Verwendung von Annahmen der von Mathematica.
Geoff Oxberry
MuPAD kann nur mit einer Matrix mit fester Größe umgehen und nimmt keine willkürlichen Annahmen wie positive Bestimmtheit an. Auch kann es die ursprünglich gestellte Frage der positiven Bestimmtheit von BAB nicht beantworten.
Memming
@ Memming: Fair genug. Wie gesagt, meine Erinnerung an MuPAD war erheblich veraltet, da ich das Programm zuletzt um 2006 regelmäßig verwendet habe (als ich von PCs auf Macs umgestiegen bin).
Aeismail
2

Maple 15 kann das nicht. Es hat keine Eigenschaft "Orthogonal" für Matrizen (obwohl es Symmetric und PositiveDefinite hat).

GertVdE
quelle
1
Auf Maple 16 aktualisiert -> keine Eigenschaft "Orthogonal".
GertVdE
1

In Mathematica können Sie diese Eigenschaften zumindest für bestimmte Matrizen überprüfen. Zum Beispiel die Avon Ihnen beschriebene Matrix :

In[1]:= A = {{2.0,-1.0,0.0},{-1.0,2.0,-1.0},{0.0,-1.0,2.0}};
        {SymmetricMatrixQ[A],PositiveDefiniteMatrixQ[A]}
Out[2]= {True,True}

Für die Matrix B:

In[3]:= B = {{0, -0.80, -0.60}, {0.80, -0.36, 0.48}, {0.60, 0.48, -0.64}};
        Transpose[B] == Inverse[B]
Out[4]= True

Dann:

In[5]:= c = B.A.Transpose[B];
        {SymmetricMatrixQ[c],PositiveDefiniteMatrixQ[c]}
Out[6]= {True,True}

Mathematica-Matrizen und lineare Algebra-Dokumentation

Lynchen
quelle
7
Ich verstehe, dass die obigen Prädikate diese Eigenschaft für eine gegebene Matrix verifizieren, anstatt diese Eigenschaften symbolisch zu verbreiten, wie Matt dies verlangt.
Matt Knepley
Ah ja. Das tut mir leid. Ich habe es falsch verstanden.
Lynchs