【问题标题】:how to make loop until I get positive definite matrix?如何制作循环,直到我得到正定矩阵?
【发布时间】:2016-08-07 02:45:09
【问题描述】:

我正在尝试通过像这样随机生成每个元素来制作一个 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函数吗?

【问题讨论】:

    标签: r matrix while-loop do-while


    【解决方案1】:

    我会以另一种方式解决问题。我会构建一个只有正值的对角矩阵(通过构造是正定的),然后构建一个随机变化的基矩阵,这样我就可以转换我的对角矩阵,保持属性为正定。例如:

    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
    

    【讨论】:

      猜你喜欢
      • 2020-08-06
      • 2020-08-13
      • 1970-01-01
      • 1970-01-01
      • 2021-05-24
      • 1970-01-01
      • 2023-01-02
      • 2017-09-03
      • 2016-11-03
      相关资源
      最近更新 更多