Generieren symmetrischer positiver definitiver Matrizen mithilfe von Indizes

8

Ich habe versucht, Testfälle für CG auszuführen, und ich muss Folgendes generieren:

  • symmetrische positive definitive Matrizen
  • mit einer Größe> 10.000
  • VOLL DICHTE
  • Verwenden Sie nur Matrixindizes und gegebenenfalls 1 Vektor (wie A(i,j)=x(i)x(j)(i+j) )

  • Mit einer Bedingungsnummer von weniger als 1000.

Ich habe versucht:

  1. Generieren von Zufallsmatrizen mit A=rand(N,N)und dann A'ASym. PD. [Dies erhöht die Bedingungsnummer]

  2. Wenn Sie den Vektor-Appraoch wie gezeigt verwenden, kann ich anscheinend keine Funktion erhalten, (x,i,j)die Sym und PD gewährleistet.

Nach langem Experimentieren kam ich auf Folgendes:

a(it,jt) = (vec(it)+vec(jt))/((it-1)^2+(jt-1)^2);Wenn itjt

a(it,it) = x(it)wenn it=jt

Aber das ist PD bis etwa 500x500.

  1. XLATMR . [Bei all der Einstufung und Skalierung ist es zu schwer zu verstehen. Zumal ich die zugrunde liegende lineare Algebra nicht verstehen kann]

Kann mir jemand eine Funktion in x (Vektor) und i, j (Indizes) geben, die die oben genannten Anforderungen erfüllt?

Anfrage
quelle
1
Versuchen Sie , den diagonalen Einträgen Ihrer Matrix eine große Zahl (in der Reihenfolge der Bedingungsnummer) hinzuzufügen . Dies entspricht dem Hinzufügen von α zu jedem Ihrer Eigenwerte und sollte die Bedingungsnummer verbessern. αα
Aron Ahmadia
@ AaronAhmadia, funktioniert hervorragend! Vielen Dank! Welche große Anzahl sollte ich jedoch hinzufügen? Ich habe N selbst ausprobiert und es hat bis 5000x5000 funktioniert (gerade abgeschlossene Simulationen). Wird die Verwendung a+N*eye(N,N)sicherstellen, dass es für alle Werte über 5000 funktioniert? Können Sie Ihren Kommentar in eine Antwort umwandeln?
Untersuchung

Antworten:

10

cD[1,c]1cuA:=(ItuuT)D(ItuuT)t=2/uTu

O(n2)v:=Dus:=t2uTv/2w:=tvsuO(n)AA=DuwTwuTuO(n)

D

αAαα=A

Arnold Neumaier
quelle
Dies ist perfekt!
Untersuchung
Wie soll ich den Algorithmus ändern, um mir Matrizen bereitzustellen, wenn ich die Eigenwerte bereitstelle? Zum Beispiel möchte ich eine nicht symmetrische Matrix mit Eigenwerten 1,-1,2,-2...50,-50.
Untersuchung
1
D=Diag(50:50) im obigen Rezept gibt Ihnen diese Eigenwerte, aber mit dieser Auswahl ist die Matrix jetzt symmetrisch unbestimmt, und CG würde ein solches Problem nicht lösen. Und in Ihrem Kommentar fragen Sie sogar nach einer unsymmetrischen Matrix, wehre CG gilt auch nicht. Vielleicht ist es am besten, eine neue Frage zu stellen, mit was genau Sie wollen.
Arnold Neumaier
3

Versuchen Sie , den diagonalen Einträgen Ihrer Matrix eine große Zahl (in der Reihenfolge der Norm der Matrix) hinzuzufügen . Dies entspricht dem Hinzufügen von zu jedem Ihrer Eigenwerte und sollte die Bedingungsnummer verbessern, indem die Lücke zwischen dem größten und dem kleinsten Eigenwert verringert wird. αα

Aron Ahmadia
quelle
2

Ich bin mir nicht sicher, wie Sie es mit nur einem Vektor machen würden, aber mit zwei Zufallsvektoren und der Größe können Sie über eine positive Matrix erzeugen wobei eine Drehung in der Ebene der Achsen und .xθN

U=iRi(θi)A=Udiag(abs(x))U
Ri()ii+1 mod N

Wenn Sie die Bedingungsnummer verbessern möchten, können Sie einen festen positiven Wert hinzufügen und gegebenenfalls neu skalieren.x

Todesatem
quelle
Es tut mir leid, aber meine Mathematik ist noch nicht so toll. Bedeutet Transponieren? Was bedeutet Rotation in der Ebene? Das Speichern von 2 Vektoren ist zwar etwas teuer, aber dennoch sieht dieser Look sehr interessant aus. U
Untersuchung
Ri(θi)=(100cosθisinθisinθicosθi1) ist die Rotationsmatrix. bezeichnet die komplexe konjugierte transponierte Matrix (vorausgesetzt, alles ist real, es ist nur die Transponierte). U
Todesatem
2

Ein ganz anderer Weg wäre wie folgt : Betrachten Sie einen Zufallsvektor , dann ist eine Rang-Eins-Matrix mit Eigenwerten gleich Null und einem streng positiven Eigenwert gleich mit Eigenvektor . Es ist auch symmetrisch.xA=xxTN1x2x

Um eine dichte SPD-Matrix zu erstellen, addieren Sie viele solcher Rang-1-Matrizen. Mit anderen Worten, wenn Sie Vektoren (z. B. Zufallsvektoren), dann ist SPD, wenn und wenn die Vektoren linear unabhängig sind (wenn sie nicht linear unabhängig sind, dann ist positiv semidefinit). Mit der sukzessiven Gram-Schmidt-Orthogonalisierung können Sie überprüfen, ob Ihre Vektoren (oder die ersten Vektoren, die Sie aus dem Zufallsprozess zeichnen) linear unabhängig sind. Sie erhalten jedoch wahrscheinlich auch eine SPD-Matrix, wenn Sie einfach wählen Vektoren.Mxi

A=i=1MxixiT
MNxiAMMNMN
Wolfgang Bangerth
quelle