# Select the vector component if the real part is sufficiently small

• Mathematica
• member 428835

#### member 428835

Hi PF!

Given a list of numbers, how do I select the element that has the smallest real part? I don't just want the real part though, I want the entire component.

I googled this and tried a few things but nothing works.

Can you provide some context here? Are these complex numbers or vectors whose components are complex numbers or qaternions?

Can you provide some context here? Are these complex numbers or vectors whose components are complex numbers or qaternions?
I'm given a single vector who's components are complex. I'm iterating through a parameter, and as I do, Mathematica automatically sorts them (unsure how, it's under the hood). The parameter value I loop through sometimes sends the real part of some components to zero. Then Mathematica sorts, but the output is different, causing me a headache to find the correct vector position.

Example: let's say after three iterations the output vector looks as follows for each iteration $$\begin{bmatrix}1.6+i\\6.5+0i\\4+21i\end{bmatrix}\to\begin{bmatrix}1.5+1.2i\\4.8+200i\\0+36i\end{bmatrix}\to \begin{bmatrix}1.2+1.5i\\0+53i\\0+400i\end{bmatrix}$$

Each vector component should be smoothly transitioning through iterations, so there should be no jumps, and in fact each progression should be monotonic in both real and imaginary components. Notice going from vector 2 to 3 the sorting changes. Clearly in vector 3, the 2nd and 3rd component should be changed. However, sometimes Mathematica sorts outputs very confusing.

So I'm trying to identify the correct way to order these outputs.

Honestly I don’t know how sorting is involved here. Is it using the modulus of the complex number to order the components of each vector or more correctly list if it’s being sorted?

Are you saying you have some parameter say “t” that you are iterating over and multiplying the first vector by “t” to get the next vector? So that you are tracing some particles trajectory in a 3D complex number space?

Honestly I don’t know how sorting is involved here. Is it using the modulus of the complex number to order the components of each vector or more correctly list if it’s being sorted?
Yea I think that's exactly what it's doing.

Are you saying you have some parameter say “t” that you are iterating over and multiplying the first vector by “t” to get the next vector? So that you are tracing some particles trajectory in a 3D complex number space?
I'm afraid it's a little more complicated. I'm solving the quadratic eigenvalue problem $$M+\lambda \epsilon \Phi + \lambda^2 K = 0$$ where ##\epsilon## is changing. As it changes, the eigenvalues change, but they do so smoothly. The real parts of the eigenvalues eventually vanish, but the complex components monotonically rise, but at different slopes. But if the quantities are well ordered (no overlap) then I'm actually thinking I could order these by their imaginary components, since these components should grow approximately linearly.

Do you know how to do this?

No, but it’s good you explained it better as someone might jump in and help.

Can you add any more on the M, ##\lambda##, ##\epsilon##, ##\Phi##, and K?

If you want to extract the element of a list of complex constants with the smallest real part then

Code:
SortBy[{1.5 + 1.2 I, 4.8 + 200 I, 0 + 36 I}, Re][]

will give you

Code:
36 I

If you want to order a vector of complex constants by their imaginary components then this

Code:
SortBy[{1.5 + 1.2 I, 4.8 + 200 I, 0 + 36 I}, Im]

will give you this

Code:
{1.5 + 1.2 I, 0 + 36 I, 4.8 + 200 I}

Last edited:
• jedishrfu and member 428835