MATLAB Answers

0

Find smallest imaginary values of a vector of real and complex number

Asked by Paolo Bighignoli on 14 Jun 2018 at 10:48
Latest activity Commented on by Paolo Bighignoli on 14 Jun 2018 at 14:59

I have a vector of real and complex number, and without using a routine i was wondering if there is a comand to find the numbers with smallest imaginary part and their index in the vector. So for example if the vector is v = [1 2 3 4+5i 6+7i 8 9+10i] the output that i want (if i want for example the 2 smallest) is

b = [4+5i 6+7i] and i = [4 5].

  2 Comments

Aren't 2, 3, and 8 the complex numbers with the smallest imaginary part (equal to 0)?

Hi Guillaume, yes they are the ones with the smallest part but sorry if i didn't explained exactly. I'm searching for the smallest but also >0.

Sign in to comment.

2 Answers

Answer by Adam
on 14 Jun 2018 at 11:06
Edited by Adam
on 14 Jun 2018 at 11:07
 Accepted Answer

Something like this would do it, albeit with some better variable naming and handling of error cases.

[~, idx] = sort( nonzeros( imag( v ) ) );
imagIdx = find( imag( v ) ~= 0 );
n = 2; % The number of smallest to extract
i= imagIdx( idx(1:n) );
b = v( :, i);

  1 Comment

Thank you Adam it's exactly what i was searching for.

Sign in to comment.


Answer by KSSV
on 14 Jun 2018 at 11:10

v = [1 2 3 4+5i 6+7i 8 9+10i] ;
[val,idx] = sort(imag(v)) ;
iwant = v(idx(val~=0))

  0 Comments

Sign in to comment.


Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today