Asked by Jamie
on 18 Apr 2013

I would like to identify the occurences (index) of an arbitrary value within a Vector. The values I wish to identify will be close to but may not be exactly equal to this value.

For example having obtained the vector [Vector,t] = lsim(G,u,t) I would like to identify those points where the Vector assumedly intersects a horizontal line of given amplitude plot([X1 X2],[Y1 Y1])

I can obtain the first value quite simply with something along the lines of

[index value] = min(abs(abs(Vector) - abs(arbitrary_value)))

The find function is of some assitance however it requires that the arbitrary value equals the value of an element within the Vector exactly. Hence Idxs = find(A==MinValue) does not return a value within proximity of the intersection (or any point for that matter)

I thought I might be able to scrape by with a for loop i.e.

for i = 1:length(Vector)

if (Vector(i) - arbitrary_value) < tolerance index(k) = i; Value(k) = y(i); k = k+1; end end

however it is far from an attractive or precise solution.

Any suggestions would be welcome.

Regards

*No products are associated with this question.*

Answer by Andrei Bobrov
on 18 Apr 2013

Edited by Andrei Bobrov
on 18 Apr 2013

Accepted answer

eg:

tolerance = 1e-3; ii = abs(Vector - arbitrary_value) < tolerance;

Value = Vector(ii); index = find(ii);

ADD variant

t = vin - av; idx = cellfun(@(x)strfind(sign(t(:).'),x),{0,[-1 1],[1 -1]},'un',0); x0 = bsxfun(@plus,[idx{2:end}],(0:1)'); [~,ii] = min(abs(t(x0))); iout = sort([[idx{1}],x0(sub2ind(size(x0),ii,1:size(x0,2)))]); index = vin(iout);

Jamie
on 18 Apr 2013

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi test

Learn moreOpportunities for recent engineering grads.

Apply Today
## 0 Comments