Как найти индекс значения, где сходятся векторные элементы?
Скажем, у меня есть вектор:
A = [1.444, 1.425, 1.435, 1.438, 1.438, 1.436, 1.436, 1.436, 1.436, 1.436];
Как видно, этот вектор A
стабилизируется или сходится при 1.436
, Как я могу найти индекс этого значения, например 1.436
в MATLAB?
Редактировать:
Больше примеров:
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 ответ
В соответствии с вашими правками, предположим, что вектор всегда будет сходиться и конвергированное значение будет последним элементом (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