如何制作循环直到我得到正定矩阵?

时间:2016-04-15 08:20:15

标签: r matrix while-loop do-while

我试图通过随机生成这样的每个元素来制作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功能吗?

1 个答案:

答案 0 :(得分: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