Octave中最速下降算法

时间:2013-11-19 14:09:20

标签: octave mathematical-optimization

我在八度音程中实现这个算法时遇到了麻烦,即使这个算法的伪代码看起来很简单。覆盖这个算法的书只有1页长,所以关于这个算法没有太多的信息,所以我只想发布psedocode:

Compute r = b - Ax and  p = A r
Until convergence, Do:
     a <- (r,r) / (p,r)
     x <- x + a r
     r <- r - r p
     compute p := A r
End do

这是我尝试在Octave中实现这一点。我在书中用一个例子来测试程序:

A = [5,2,-1;3,7,3;1,-4,6];
b = [2;-1;1];
x0 = [0;0;0];
Tol = 0.00001;

x=x0;

r = b-A*x;
p = A*r;
while true,
    a = (r')*(r)/((p)*(r'));
    disp(a);
    x = x + a * r;
    r = r - a * p;
    p = A*r;
    if norm(r) < Tol,
        break
    end
end

当我运行这个时,我得到一个错误,说第一个矩阵im除以1x1而第二个矩阵是3v3,所以我无法做到这一点,我明白了。我考虑过使用./运算符,但据我所知,这并没有产生我正在寻找的结果,这个例子应该是可以分割的。我搞砸了我的实现还是我对这个算法的理解错了?不知道是在这里发布还是math.stackexchange,但我试过这里。

1 个答案:

答案 0 :(得分:1)

我的第一个想法是错误消息:你有(r') * (r) / ((p) * (r'));分母应该是(p) * (r')还是(p') * (r)(注意'所在的位置?)