在矩阵中找到两个值之间的局部最小值和局部最大值

时间:2014-04-18 22:28:12

标签: matlab matrix plot minmax

我终于能够读取Excel工作表并根据需要绘制数据并获得平均数据。但是,现在我在尝试在图表上找到值之间的本地最小值和局部最大值时遇到问题。我试图找到20到50之间的本地最小值和50到100之间的本地最大值。这是我在引入数据时使用的代码:

filename = ('10070.xlsx');           %Opens the specified file
[data, text, ~] = xlsread(filename); %Gives a table for data and text
[~,l] = find(strcmp(text, 'Left Knee Angle'));
left_data = data(:,l);
subplot(2,2,1);
plot(left_data)
title({'Left Knee Angle'});
ylabel({'Angle'});
xlabel({'% of Trial'});
[~,r] = find(strcmp(text, 'Right Knee Angle'));
right_data = data(:,r);
subplot(2,2,2);
plot(right_data)
title({'Right Knee Angle'});
ylabel({'Angle'});
xlabel({'% of Trial'});
left_avg = mean(left_data,2);
subplot(2,2,3);
plot(left_avg)
title({'Left Knee Average Angle'});
ylabel({'Angle'});
xlabel({'% of Trial'});
right_avg = mean(right_data,2);
subplot(2,2,4);
plot(right_avg)
title({'Right Knee Average Angle'});
ylabel({'Angle'});
xlabel({'% of Trial'});

我尝试过使用:

[maxVal, maxIndex] = max(l(x>=20&x<=50));

但这对我没用。任何人有任何想法/更好的方法来做到这一点?也许我只是错误地打字?我还将重复另一组数据的过程(它分为左和右)。此外,出于好奇,有没有办法单独拉出每个图形,并从左侧和右侧的各个图形中找到本地最小值/最大值并将其平均值?我只是想提前考虑这个问题。以下是图表屏幕截图的链接: http://i.imgur.com/SKep8Iy.jpg

enter image description here

1 个答案:

答案 0 :(得分:1)

试试这个 -

%%// Min-max index ranges
min_ind_range = [20 50];
max_ind_range = [50 100];

%%// Min value
[minVal, minIndex] = min(x(min_ind_range(1):min_ind_range(2)));
minIndex = minIndex+min_ind_range(1)-1

%%// Max value
[maxVal, maxIndex] = max(x(max_ind_range(1):max_ind_range(2)));
maxIndex = maxIndex+max_ind_range(1)-1

编辑1:对于大量数据,如上面两张图所示,请使用此 -

%%// Min-max index ranges
min_ind_range = [20 50];
max_ind_range = [50 100];

%%//  *** Left Case ***
%%// Min value
[left_minVal, left_minIndex] = min(left_data(min_ind_range(1):min_ind_range(2),:));
left_minIndex = left_minIndex+min_ind_range(1)-1;

[left_maxVal, left_maxIndex] = max(left_data(max_ind_range(1):max_ind_range(2),:));
left_maxIndex = left_maxIndex+max_ind_range(1)-1;

%%//  *** Right Case ***
%%// Min value
[right_minVal, right_minIndex] = min(right_data(min_ind_range(1):min_ind_range(2),:));
right_minIndex = right_minIndex+min_ind_range(1)-1;

[right_maxVal, right_maxIndex] = max(right_data(max_ind_range(1):max_ind_range(2),:));
right_maxIndex = right_maxIndex+max_ind_range(1)-1;

请注意,现在我们有一系列最小值和最大值。