Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MATLAB中用逻辑索引求局部极大值_Matlab_Matrix Indexing - Fatal编程技术网

在MATLAB中用逻辑索引求局部极大值

在MATLAB中用逻辑索引求局部极大值,matlab,matrix-indexing,Matlab,Matrix Indexing,我以前在MATLAB向量中使用过逻辑索引,例如 X = X(X < 6); 我知道这在向量的第一个和最后一个元素中不起作用,并且有更好的方法找到局部极值 这个问题与前一个问题()不同,因为我对寻找最大值不是特别感兴趣,而是能够使用逻辑索引和“局部”条件来引用向量中的相邻元素 您不能像您描述的那样直接执行此操作。您必须创建额外的数据,这些数据本身可以进行逻辑测试,其输出可以用于索引到向量中。在您的例子中,最好的方法是计算一个近似导数,并找到该导数的向下零交点 x = rand(1,50);

我以前在MATLAB向量中使用过逻辑索引,例如

X = X(X < 6);
我知道这在向量的第一个和最后一个元素中不起作用,并且有更好的方法找到局部极值


这个问题与前一个问题()不同,因为我对寻找最大值不是特别感兴趣,而是能够使用逻辑索引和“局部”条件来引用向量中的相邻元素

您不能像您描述的那样直接执行此操作。您必须创建额外的数据,这些数据本身可以进行逻辑测试,其输出可以用于索引到向量中。在您的例子中,最好的方法是计算一个近似导数,并找到该导数的向下零交点

x = rand(1,50);
xDiff = diff(x);
xZeroCross = diff(sign(xDiff));
indexUp = find(xZeroCross>0)+1;
indexDown = find(xZeroCross<0)+1;
figure();
plot(1:50,x,'r',indexDown,x(indexDown),'b*',indexUp,x(indexUp),'go');
x=rand(1,50);
xDiff=diff(x);
xZeroCross=diff(符号(xDiff));
indexUp=find(xZeroCross>0)+1;

indexDown=find(xZeroCross您不能像您描述的那样直接执行此操作。您必须创建额外的数据,这些数据本身可以进行逻辑测试,其输出可以用于索引到向量中。在您的情况下,最好的方法是计算近似导数,并找到该导数的向下零交叉

x = rand(1,50);
xDiff = diff(x);
xZeroCross = diff(sign(xDiff));
indexUp = find(xZeroCross>0)+1;
indexDown = find(xZeroCross<0)+1;
figure();
plot(1:50,x,'r',indexDown,x(indexDown),'b*',indexUp,x(indexUp),'go');
x=rand(1,50);
xDiff=diff(x);
xZeroCross=diff(符号(xDiff));
indexUp=find(xZeroCross>0)+1;

indexDown=find(XZeroCross向我们显示最小样本输入数据和预期输出?我认为,如果没有某种循环,仅使用逻辑索引是不可能的。对于相对简单的约束或条件,可以使用
ordfilt2
findpeaks
。请参阅。向我们显示最小样本输入数据和预期输出?我不认为这是我的想法仅使用逻辑索引而不使用某种循环是可能的。有关相对简单的约束或条件,可以使用
ordfilt2
findpeaks
。请参阅。