Matlab 求矩阵中两个值之间的局部最小值和局部最大值

Matlab 求矩阵中两个值之间的局部最小值和局部最大值,matlab,matrix,plot,minmax,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 [

我终于能够读入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));
[maxVal,maxIndex]=max(l(x>=20&x试试这个-

%%// 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;

请注意,现在我们有一系列的最小-最大值及其索引。

当我尝试此操作时,我得到了“x”未定义的事实,我同意这一点。但是,在前面导入数据时,我使用的是:left_data=data(:,l);这可能是问题的原因吗?事实上我并没有真正提取'x'值?您在代码中使用了
x
x
对您意味着什么?我已经标记了xaxis,但除此之外,我的代码中没有'x'。如果您到处查看,它要么是(:,l)要么是[~,r].你还有什么其他的想法吗?好的,打印的最小和最大索引都是50,如果你看我的图表,这似乎是正确的,所以这部分看起来是正确的,但是我仍然希望能够分别看每个单独的图表,并且有类似的
左膝1=value
左膝2=value 2
并让它显示这些。这可能吗?回顾你的图表,我认为你需要使用
x
作为
left\u avg
,并获得它的最小值/最大值和索引。然后用
right\u avg
重复它,也就是说,将x作为
right\u avg
并获得最小值/最大值和索引。记住,对它使用不同的变量名
left_avg
right_avg
案例,否则您将写过头。