【问题标题】:How to looping until I get a positive definite matrix如何循环直到我得到一个正定矩阵
【发布时间】:2020-08-06 15:00:16
【问题描述】:

我想我有一个简单的问题,在我真正的问题中,有时我的循环得到了一个非“正定”矩阵,然后我无法使用这个矩阵作为 Scale 参数从正态分布中生成随机值.所以,我正在苦苦思考如何再次计算它,直到我得到一个“肯定”的结果。我做了一个简单的例子,可以提供帮助:

test = function(a){
  b = rnorm(1) + a
  c = b - .5
  return(c)
}
replicate(20,test(.5))

[1]  0.93297282  1.17247501 -0.06919809  0.71069048 -0.12760964  1.46818526 -1.34637900  0.85637634 -0.03191685
[10]  0.24198938  0.26555849 -0.47910932  0.11841441  1.92971628 -1.23540504 -0.07653842 -0.08895779  1.32780821
[19] -0.03604193  0.13845360

假设我希望“c”为正数,并且每当“c”为负数时,我希望再次生成“b”。我知道我们可以截断,但在我的实际情况中,我需要返回并再次生成变量 'b',直到获得 'c' 的 20 个正值。

任何提示我该怎么做?

【问题讨论】:

  • 我猜你需要一个 repeatwhile 循环。

标签: r loops while-loop replication do-while


【解决方案1】:

如果c >= 0,您可以使用repeat 循环和break

test <- function(a) {
  repeat({
    b <- rnorm(1) + a
    c <- b - .5
    if (c >= 0) break
  })
  return(c)
}

set.seed(42)
replicate(20, test(.5))
# [1] 1.37095845 0.36312841 0.63286260 0.40426832 1.51152200 2.01842371
# [7] 1.30486965 2.28664539 0.63595040 1.32011335 1.21467470 1.89519346
# [13] 0.46009735 0.45545012 0.70483734 1.03510352 0.50495512 0.03612261
# [19] 0.20599860 0.75816324

【讨论】:

    猜你喜欢
    • 2016-08-07
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 2015-03-27
    • 2021-05-24
    • 1970-01-01
    • 2022-01-12
    相关资源
    最近更新 更多