Octave 中的基本 for 循环扩展

Basic for loop in Octave expanded

出于某种原因,我无法在 Octave 中克服这个问题:

for i=1:n
  y(2:(i+1))=y(2:(i+1))-x(i)*y(1:i)
end;

如果我把它分解成步骤(假设 n=3),循环会不会像这样:

 i=1
y(2)=y(2)-x(1)*y(1)
 i=2
y(2)=y(2)-x(2)*y(1)
y(3)=y(3)-x(2)*y(2)
 i=3
y(2)=y(2)-x(3)*y(1)
y(3)=y(3)-x(3)*y(2)
y(4)=y(4)-x(3)*y(3)

嗯,我一定是错的,因为一步一步做循环时结果不好,但对于我的生活我无法弄清楚它在哪里。有人可以帮我吗?

首先,请原谅我的造型,我以前从未在 Stack Overflow 中使用过 matrices/vector 表示。无论如何,我希望这能让您了解它的内部工作原理:

x = [1,2,3] 
y = [1,0,0,0]

第 1 步:

第一个循环将执行:

y(2)=y(2)-x(1)*y(1)

这些只是标量值,y(2) = 0, x(1) = 1, y(1) = 1。 所以y(2) = 0-1*1 = -1,也就是说向量y中的第2个位置会变成-1.

导致 y = [1,-1,0,0]

第 2 步:

下一个循环将执行

此处 y(2,3) 和 y(1,2) 是大小为 2 的向量,其中值是与 y 中的位置对应的值。计算新向量后 [-3,2] 这将被分配到向量 y 中的第 2 和第 3 个位置。生成向量 [1,-3,2,0].

第 3 步: 重复步骤 2,但这次使用大小为 3 的向量,并将结果替换为 y 矩阵中的 2、3、4 位置,最终向量 y 为:[1,-6,11,-6]