2016-04-15 20 views
1

Ich versuche, eine 3x3 symmetrische Matrix durch zufälliges Erzeugen jedes dieser Elemente
| a b c |
| b d e |
| c e f |
wie man Schleife macht, bis ich positiv definite Matrix bekomme?

a <- rnorm(1,0,3); b <- rnorm(1,0,3); c <- rnorm(1,0,3)....

Während dies zu tun, wenn die Matrix positiv definit ist dann verwenden, werde ich aber, wenn nicht positiv definit ist dann möchte ich die Elemente der Matrix regenerieren.

Wie soll ich das in R machen? Muss ich die Funktion while verwenden?

Antwort

0

Ich würde das Problem auf andere Weise angehen. Ich würde eine Diagonalmatrix mit nur positiven Werten konstruieren (die durch die Konstruktion positiv positiv ist) und dann eine zufällige Änderung der Basismatrix erstellen, so dass ich meine Diagonalmatrix transformieren kann, wobei die Eigenschaft positiv definit ist. Zum Beispiel:

set.seed(1) 
#number of dimensions 
n<-3 
A<-diag(runif(n,1,10)) #you can change the range of the eigen values 
#define the change of basis matrix 
C<-matrix(rnorm(n^2),ncol=n) 
#transform A 
res<- solve(C) %*% A %*% C 

Wie können wir die Eigenwerte zu sehen sind erhalten:

eigen(A,only.values=TRUE)$value 
#[1] 6.155680 4.349115 3.389578 
eigen(res,only.values=TRUE)$value 
#[1] 6.155680 4.349115 3.389578 
Verwandte Themen