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 )
Mit einer Bedingungsnummer von weniger als 1000.
Ich habe versucht:
Generieren von Zufallsmatrizen mit
A=rand(N,N)
und dannA'A
Sym. PD. [Dies erhöht die Bedingungsnummer]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
a(it,it) = x(it)
wenn
Aber das ist PD bis etwa 500x500.
- 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?
linear-algebra
Anfrage
quelle
quelle
a+N*eye(N,N)
sicherstellen, dass es für alle Werte über 5000 funktioniert? Können Sie Ihren Kommentar in eine Antwort umwandeln?Antworten:
quelle
1,-1,2,-2...50,-50
.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.α α
quelle
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
Wenn Sie die Bedingungsnummer verbessern möchten, können Sie einen festen positiven Wert hinzufügen und gegebenenfalls neu skalieren.x
quelle
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.x A=xxT N−1 ∥x∥2 x
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.M xi
quelle