Как найти индекс значения, где сходятся векторные элементы? - PullRequest
0 голосов
/ 04 декабря 2018

Скажем, у меня есть вектор:

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 Ответ

0 голосов
/ 05 декабря 2018

Согласно вашему редактированию, предположим, что вектор всегда будет сходиться, а конвергированное значение является последним элементом (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
...