【问题标题】:Initial starting point for Gradient Projection(GP) Algorithm梯度投影(GP)算法的初始起点
【发布时间】:2018-04-12 21:04:34
【问题描述】:

我正在为 GP 实现一个迭代算法的代码,我有一些顾虑。我希望有人能帮我弄清楚逻辑:

1) 我需要能够从满足约束条件的初始起点 b 开始,如 Ab = c

这里是矩阵A和向量c

A <- rbind(c(1,1,1),c(-1,1,-1))
c <- c(0,5)

我尝试了以下 2 种方法来找到 b0 作为开始迭代的初始点

b0 <- solve(t(A)%*%A)%*%t(A)%*%c
b0 <- ginv(A)%*%c

但是当我检查下面的代码时,我没有得到所有 b0 组件。

A %*% b0 == c

你能帮我找出一个更好的方法来获得满足条件 Ab=c 的初始点吗?

谢谢

【问题讨论】:

    标签: r gradient


    【解决方案1】:

    我怀疑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
    

    【讨论】:

    • 谢谢,但这不是我要找的。我需要以不同的方式找到初始点,然后检查答案
    • 我可以提个建议吗?也许你可以改写你的问题。以目前的形式,您似乎在问为什么ginv(A) %*% c 没有给出正确的答案。 (确实如此。)如果您正在寻找ginv(A) %*% c 的替代品,您应该在问题中说明这一点。 (“更好的方法”在什么意义上?)
    猜你喜欢
    • 2020-07-06
    • 2019-01-15
    • 2022-06-11
    • 1970-01-01
    • 2021-11-17
    • 2018-05-03
    • 1970-01-01
    • 2017-04-09
    • 2021-09-10
    相关资源
    最近更新 更多