我正在为GP实现一个迭代算法的代码,我有一些顾虑。我希望有人可以帮助我找出逻辑:
1)我需要能够从满足约束条件的初始起点b开始,如Ab = c
这是矩阵A和向量c
A <- rbind(c(1,1,1),c(-1,1,-1))
c <- c(0,5)
我尝试了以下两种方法来找到b0作为开始迭代的初始点
b0 <- solve(t(A)%*%A)%*%t(A)%*%c
b0 <- ginv(A)%*%c
但是当我检查下面的代码时,我没有得到所有的b0组件。
A %*% b0 == c
你能帮我找出一个更好的方法来获得满足条件Ab = c的初始点吗?
谢谢
答案 0 :(得分:0)
我怀疑你的问题可以由Why are these numbers not equal?回答。引用接受的答案,
在这种情况下,由于并非所有数字都可以在IEEE浮点运算中完全表示(几乎所有计算机都用来表示十进制数并使用它们进行数学计算的标准),因此您并不总能得到预期的结果。
all.equal
将返回TRUE
。
A <- rbind(c(1, 1, 1),c(-1, 1, -1))
C <- matrix(c(0,5), nc = 1)
b0 <- MASS::ginv(A) %*% C
A %*% b0 == C
# [,1]
# [1,] FALSE
# [2,] FALSE
all.equal(A %*% b0, C)
# [1] TRUE