我想要查找矢量(如示例圖中所示)中間隔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個時間間隔,你一定要防止代碼重複每間隔。 –