说我有一个向量:
A = [1.444, 1.425, 1.435, 1.438, 1.438, 1.436, 1.436, 1.436, 1.436, 1.436];
可以看出,该向量A
稳定或收敛于1.436
。如何在MATLAB中找到该值的索引,例如1.436
?
编辑:
更多示例:
B = [1 2 1 4 2 5 6 2 5 5 5 5 5 5 5 5 5 5]
C = [224.424 224.455 224.454 224.456 224.456 224.452 224.451 224.456 . 224.454 224.454 224.454 224.454 224.454 224.454]
因此,我想要的输出是向量中元素不再更改时的索引。举例来说,向量中的值是在时间t
上获取的。因此,对于第一个向量,当元素在9
处保持不变时,索引将位于索引5
。
向量C
也是如此。当元素在9
处恒定时,此处的所需输出为索引224.454
。
答案 0 :(得分:2)
根据您的编辑,假定向量将始终收敛,并且收敛的值是最后一个元素(A(end)
)。另外,假设收敛时的值等于最后一个元素。
这个想法是首先找到不等于最后一个元素的最后一个元素的索引。然后,索引+1是第一个收敛元素的索引,即find(A~=A(end),1,'last') + 1
示例1:
A = [1.444, 1.425, 1.435, 1.438, 1.438, 1.436, 1.436, 1.436, 1.436, 1.436];
index = find(A~=A(end),1,'last') + 1
输出:
index =
6
示例2
B = [1 2 1 4 2 5 6 2 5 5 5 5 5 5 5 5 5 5 5];
index = find(B~=B(end),1,'last') + 1
输出:
index =
9
示例3
C = [224.424 224.455 224.454 224.456 224.456 224.452 224.451 224.456 224.454 224.454 224.454 224.454 224.454 224.454 224.454];
index = find(C~=C(end),1,'last') + 1
输出:
index =
9
更新:
由于您正在处理收敛问题,因此最好指定收敛公差。例如:
tolerance = 1e-5;
A = [1.444, 1.425, 1.435, 1.438, 1.438, 1.436, 1.436, 1.436, 1.436, 1.436];
index = find(abs(A - A(end)) >= tolerance,1,'last') + 1
输出:
index =
6