2014-04-18 132 views
2

我終於可以讀取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

嘗試此 -

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

請注意,現在我們有一系列最小值 - 最大值s和他們的指數。

+0

當我嘗試這個時,我得到'我'同意'x'的事實。但是,在導入我使用的數據時較早: left_data = data(:,l); 這可能導致問題?事實上,我不是真的拉'x'值? –

+0

您在代碼中使用了'x'。 'x'對你來說意味着什麼? – Divakar

+0

我已經標出了xaxis,但除此之外,我的代碼中沒有「x」。如果你到處看,它是(:,l)或[〜,r]。你有任何其他想法,爲什麼它不工作? –