我想要查找矢量(如示例图中所示)中间隔1中的最大值和间隔2中的最大值的位置和值。给出区间1和2的边界。在矢量的间隔中查找最大值
NEW VERSION - 代码更可重复使用的
仅使用一个时间间隔为丹尼斯Jaheruddin提出并写成的函数。
function test
%% Test data
x=0:0.1:10-0.1;
x_total=0:0.1:20-0.1;
y=-(x-5.8).^2+25;
y_total=[y,y+10];
figure(1);
plot(x_total,y_total); grid on;
interval=[12,18];
[maxValue,maxValuePositon] = findMaxInInterval(x_total,y_total,interval)
[maxValue,maxValuePositon] = findMaxInInterval2(x_total,y_total,interval)
end
%% Algorithm
function [maxValue,maxValuePositon] = findMaxInInterval(x,y,interval)
index = x>=interval(1) & x <= interval(2);
offset = find(index == 1,1,'first') -1;
[maxValue,indexMax] = max(y(index));
maxValuePositon = x(indexMax+offset);
end
%% Algorithm - Alternative
function [maxValue,maxValuePositon] = findMaxInInterval2(x,y,interval)
index = x>=interval(1) & x <= interval(2);
y_temp = y(index);
x_temp = x(index);
[maxValue,indexMax] = max(y_temp);
maxValuePositon = x_temp(indexMax);
end
这是老版本
我有一个解决方案,但我的代码似乎是相当复杂的给我。有人提出更直接的解决方案(或者简单地说是正确的MATLAB函数?)。这是迄今为止我的解决方案:
%Generate test function
x=0:0.1:10-0.1;
x_total=0:0.1:20-0.1;
y=-(x-5).^2+25;
y_total=[y,y+10];
figure(1);
plot(x_total,y_total); grid on;
interval1=[2,8];
interval2=[12,18];
%Algorithm
index1 = x_total>=interval1(1) & x_total <= interval1(2);
index2 = x_total>=interval2(1) & x_total <= interval2(2);
offset1 = find(index1 == 1,1,'first') -1;
offset2 = find(index2 == 1,1,'first') -1;
disp('Maximum 1 and 2:');
[max1,indexMax1] = max(y_total(index1))
[max2,indexMax2] = max(y_total(index2))
disp('Position of Maximum 1 and 2:');
x_total(indexMax1+offset1)
x_total(indexMax2+offset2)
这功能对我来说很好。我怀疑你可以做得更简单。 – bdecaf
看起来没问题,但是如果你想要这样做超过2个时间间隔,你一定要防止代码重复每间隔。 –