2016-04-15 6 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

私は別の方法で問題にアプローチします。正の値を持つ対角行列を構築し、その行列をランダムに変更して対角行列を変換することで、その性質を正定値に保つことができます。例えば:

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 

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 

は、として、我々は固有の値が保存されて見ることができます

関連する問題