提问人:EM823823 提问时间:11/12/2023 最后编辑:EM823823 更新时间:11/12/2023 访问量:29
RNimble 的 LQ 因式分解函数
LQ factorization function for RNimble
问:
我需要在 R 中编写一个函数,将矩形 m x n (m > n) 矩阵 A 分解为一个 m x n 下三角形 L 矩阵和一个 n x n 正交 Q 矩阵。我需要写出该方法的每个步骤,以便我可以在我的 nimbleCode 函数中使用它。具体来说,我需要的是一个函数,该函数执行 lq() 函数从 tensr 包中执行的操作,此外还需要写出所有步骤。到目前为止,我所拥有的函数如下(它们给出了 A' 的 Gram-Schmidt 分解),但问题是它们生成了一个 nxm 正交矩阵 Q 和一个 mxm 下三角矩阵 L,这不是我需要的。我希望有人能帮我重写代码以获得我需要的东西。
nimQR.Q = nimbleFunction(
run = function(A = double(2)){
returnType(double(2))
A1 = t(A)
m <- dim(A1)[1]
n <- dim(A1)[2]
Q <- matrix(0, m, n)
R <- matrix(0, n, n)
for (k in 1:n) {
Q[1:m, k] <- A1[1:m, k]
if (k > 1) {
for (i in 1:(k - 1)) {
R[i, k] <- t(Q[1:m, i]) %*% Q[1:m, k]
Q[1:m, k] <- Q[1:m, k] - R[i, k] * Q[1:m, i]
}
}
R[k, k] <- sum(abs(Q[, k])^2)^(1/2)
Q[1:m, k] <- Q[1:m, k]/R[k, k]
}
return(Q)
})
nimQR.R = nimbleFunction(
run = function(A = double(2)){
returnType(double(2))
A1 = t(A)
m <- dim(A1)[1]
n <- dim(A1)[2]
Q <- matrix(0, m, m)
R <- matrix(0, n, n)
for (k in 1:n) {
Q[1:m, k] <- A1[1:m, k]
if (k > 1) {
for (i in 1:(k - 1)) {
R[i, k] <- t(Q[1:m, i]) %*% Q[1:m, k]
Q[1:m, k] <- Q[1:m, k] - R[i, k] * Q[1:m, i]
}
}
R[k, k] <- sum(abs(Q[1:m, k])^2)^(1/2)
Q[1:m, k] <- Q[1:m, k]/R[k, k]
}
return(t(R))
})
答: 暂无答案
下一个:将文本作为数据帧读取到 R 中
评论