Get Maxima from changing areas with max command
1 view (last 30 days)
Show older comments
Janosch Faulhaber
on 4 Nov 2016
Answered: Janosch Faulhaber
on 4 Nov 2016
Hey all,
i have to get peak values from temperature measurements. Therefore it is important to take one double matrix for getting the start and end points of areas I want to calculate the maxima from. Another double matrix includes the measured values I finally want to get the peaks out of. E.g The first matrix is going [1 77 244 531 till 14400] and the other one has double values in a 14400x1 matrix. Now I want to get the peaks from the 14400x1 matrix in the areas from 1 to 77, 77 to 244, 244 to 531 etc. In the end I should get a vector with all peaks inside of it... I hope someone can understand my problem... Thanks in advance for your help! I thought it should be done similar to this:
% PV_change is a 84x1 double going from [1;77;244;531;...;13608] it should give the starting and endpoints for the maxima areas.
% TempR1 is a 14400x1 double with all measured values, now I want to get all maxima from the specified areas in the former specified matrix...
% So I should get 1 maximum from area 1 to 77, 1 maximum from 77 to 244 and so on... Best would be if these maximas could be stored in a vector PEAKS
index=1;
for k1= PV_change(1:end-1)';
k2= PV_change(2:end)';
PEAKS(index)=max(TempR1(k1:k2));
index=index+1;
end
0 Comments
Accepted Answer
Image Analyst
on 4 Nov 2016
Edited: Image Analyst
on 4 Nov 2016
Try it this way instead:
% PV_change is a 84x1 double going from [1;77;244;531;...;13608] it should give the starting and endpoints for the maxima areas.
% TempR1 is a 14400x1 double with all measured values, now I want to get all maxima from the specified areas in the former specified matrix...
% So I should get 1 maximum from area 1 to 77, 1 maximum from 77 to 244 and so on... Best would be if these maximas could be stored in a vector PEAKS
% Get peak start and ends into their own separate arrays.
peakStarts = PV_change(1 : end - 1);
peakEnds = PV_change(2 : end - 1);
% Now find the max value of all the peaks.
for k = 1 : length(peakStarts)
% Get starting and stopping indexes for this peak.
k1 = peakStarts(k);
k2 = peakEnds(k);
% Get the max value of TempR1 between those indexes, inclusive.
peakAreas(k) = max(TempR1(k1 : k2));
end
By the way, you might like to use findpeaks() if you have the Signal Processing Toolbox.
0 Comments
More Answers (2)
Nick Counts
on 4 Nov 2016
Edited: Nick Counts
on 4 Nov 2016
You can index a range of TempR1 using values from your PV_Change vector. Think:
dataSet( indexVector(1:2) )
Here is an example:
% Make dummy variables that correspond to the question's parameters
PV_Change = randi(13608, 84, 1);
PV_Change = sort(PV_Change); % In ascending order
TempR1 = randi(500, 14400, 1); % 14400x1 Random temperature data
PEAKS = zeros(length(PV_Change) - 1,1); % Preallocate PEAKS
% Iterate over each PV_Change pair
for i = 1:length(PV_Change) - 1
PEAKS(i,1) = max(TempR1(PV_Change(i:i+1,1) ) );
end
Hope that helps - good luck!
0 Comments
See Also
Categories
Find more on Matrix Indexing in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!