2016-04-15 33 views
1

我試圖通過隨機生成這樣的每個元素來製作3x3對稱矩陣
| a b c |
| b d e |
| c e f |
如何使循環,直到我得到正定矩陣?

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

雖然這樣做,如果矩陣是正定然後我會使用,但如果不是正定的話,我要重新生成矩陣的元素。

我應該如何在R中做到這一點?我需要使用while功能嗎?

回答

0

我會以另一種方式解決問題。我會建立一個只有正值的對角矩陣(這是通過構造正定),然後構建一個隨機變化的基矩陣,這樣我就可以轉換我的對角矩陣,保持屬性爲正定。例如:

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 

正如我們所看到的特徵值將被保留:

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