First I'd like to thank everyone who answers these posts. I've found this forum really useful when looking up a solution to a problem.
Ok here's an example situation.
given a rather chaotic waveform D and its time vector T
I want to find the value of D where the slope is say at a maximum.
Slopes = diff(D)./diff(T) %so I would take the derivative MaxSlope = max(Slopes) %find the max
now I want to find the value in D where that slope occurs. Is there a more elegant way of doing this than?
for index = 1:length(Slopes) if Slopes(index) == MaxSlope; Point = index end end Value = D(Point)
Such as some way of finding out at what point in Slopes MaxSlope occurs?
Slopes = diff(D)./diff(T); [MaxSlope,ix] = max(Slopes); vMxSlope=D(ix); % duplicates loop wrt boundary condition
Might want to use ix+1 for the point owing to the reduction in length from the diff() operation; your call.
Also if the time sampling is uniform can eliminate one diff() on the whole vector and use dT=T(2)-T(1). Of course, if isn't uniform then the above is needed. Probably makes little, if any noticeable difference unless very long time series are involved.
Slopes = diff(D)./diff(T) [maxSlope, indexOfMaxSlope] = max(Slopes)
Logical indexing is one of my hammers, thus I saw a nail;-)
%% N = 1e4; Slopes = randn( N, 1 ); %% tic, Point1 = max(Slopes); ixPoint1 = find( Slopes==Point1 ); toc %% tic, [ Point2, ixPoint2 ] = max( Slopes ); toc
the fourth execution returned
Elapsed time is 0.000087 seconds. Elapsed time is 0.000036 seconds.
No doubt which construct is more elegant!
BTW: The tooltip help (Cntrl+F1) doesn't show the output arguments, only the inputs. It's too easy not to remember and overlook the second and third outputs.