如何找到向量元素收敛的值的索引?

时间:2018-12-04 14:57:24

标签: matlab vector convergence

说我有一个向量:

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

1 个答案:

答案 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