我想通过以下方式知道DX ( (j+1): (j+FM(i)) )
究竟是什么:
FM = [3,4,5]
CM = [0.0,1.0,2.0,3.0]
j = 0;
for i = 1:length(FM)
DX ( (j+1): (j+FM(i)) ) = ( CM(i+1) - CM (i) )/ FM (i);
end
答案 0 :(得分:1)
这是一种索引矩阵的方法。当你看到像matrix(expr1 : expr2)
这样的东西时,它正在索引一个矩阵的范围,从expr1
求值开始到任何expr2
求值结束。例如DX(1:5)
将给出矩阵的前5个元素(MATLAB使用基于1的索引)。我不确定我是否理解使用j
的意义,因为它永远不会在循环体内发生变化并始终为0,但这样做会在循环的第一次迭代中给出元素1到3 (FM(i),i = 1给你回3),第二次迭代中的元素1到4(FM(i),i = 2给你回4),以及最后一次迭代中的元素1到5(FM( i)用i = 3给你回5)。
答案 1 :(得分:1)
DX ( (j+1): (j+FM(i)) )
是一个向量,以j+1
的{{1}}元素开头,包含DX
之前的所有元素。
如果j+FM(i)
,DX=[0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]
,j=4
和FM=[3 7 5 9]
,那么i=2
是DX ( (j+1): (j+FM(i)) )=DX(5:11)
的第5到第11个元素, DX
。
答案 2 :(得分:1)
让我们把它分解。
一般来说,X(A:B)
表示我们指的是A
的{{1}}到B
元素。因此,如果X
和A=1
,则B=2
指的是X的第1和第2个元素。
在您提供的示例中,我们有:
X(A:B)
,表示代码从DX((j+1):(j+FM(i)))
元素到DX
元素引用(j+i)
。从代码中,(j+FM(i))
和j=0
用于迭代i
的长度。
总而言之,在循环的第一遍中,代码引用FM
,在第二遍中它引用DX(1:3)
,在第三遍和最后一遍中它引用{ {1}}。
现在,在您发布的代码中,该引用用于在上述索引处对变量DX(1:4)
进行赋值。具体来说,每次通过循环时,它都会尝试将DX(1:5)
分配给DX
的索引部分。
由于编写代码的方式,前两个循环可能会将值分配给(CM(i+1) - CM(i))/ FM (i)
和DX
,但最后一次迭代似乎通过写入DX(1:3)
来过度所有这些值。