【问题标题】:How to find the index of the value where vector elements converge?如何找到向量元素收敛的值的索引?
【发布时间】:2018-12-04 14:57:24
【问题描述】:

假设我有一个向量:

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。因此,对于第一个向量,当元素保持在 5 时,索引将位于索引 9
与矢量C 相同。这里想要的输出是索引9,当元素恒定在224.454 时。

【问题讨论】:

  • 如果想要比最后一个元素更复杂的东西(即A(end)),那么不,我们不会“获取图片”。您必须清楚地以数学方式定义您想要实现的目标。您如何衡量收敛性?它总是在数组的末尾吗?这是迭代过程的一部分,还是只是从数组中获取值? Edit你的问题,让它更清楚。
  • 如果你有对应的“x轴”值,你可以查看曲线的梯度,找出它的绝对值何时低于某个阈值(待定)。
  • 这是我很长时间以来见过的最糟糕的收敛!我的意思是第一个值比第二个值更接近,第三个值比第四个和第五个值更接近。你从哪里弄来的?
  • @NickyMattsson 一个非常低时间分辨率的采样弹簧阻尼系统?
  • 你可以使用diff(有一些容忍度或者你最终可能会问Why is 24.0000 not equal to 24.0000 in MATLAB?

标签: matlab vector convergence


【解决方案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

【讨论】:

  • 不错的答案,但会更好with a tolerance
  • @CrisLuengo 谢谢!你说的对。目前,问题没有指定容差,所以我假设收敛值等于最后一个元素。
猜你喜欢
  • 2020-09-16
  • 1970-01-01
  • 2012-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-21
  • 2019-06-25
相关资源
最近更新 更多