【发布时间】:2013-11-19 22:17:07
【问题描述】:
尽管该算法的伪代码看起来非常简单,但我无法以 octave 实现该算法。介绍这个算法的书只有一页长,所以关于这个算法的信息并不多,所以我只是贴出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
当我运行它时,我收到一条错误消息,说我除以的第一个矩阵是 1x1,第二个矩阵是 3v3,所以我无法做到这一点,我明白这一点。我考虑过使用 ./ 运算符,但据我了解,这不会产生我正在寻找的结果,并且此示例应该可以进行除法。我搞砸了我的实现还是我对这个算法的理解是错误的?不确定是在此处发布还是在 math.stackexchange 上发布,但我在这里尝试过。
【问题讨论】:
标签: octave mathematical-optimization