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

  • Thread starter Thread starter member 428835
  • Start date Start date
  • Tags Tags
    Component Vector
AI Thread Summary
To select the element with the smallest real part from a list of complex numbers, one can use the SortBy function in Mathematica, applying the Re function to sort based on the real parts. The discussion highlights a scenario where the real parts of eigenvalues vanish while their imaginary components increase, complicating the sorting process. It suggests that if the components are well-ordered, sorting by the imaginary parts may be a viable alternative. The user is dealing with a quadratic eigenvalue problem, which adds complexity to the sorting and ordering of the components. Overall, the conversation focuses on finding effective methods for ordering complex vector components based on their real and imaginary parts.
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.
 
Physics news on Phys.org
Can you provide some context here? Are these complex numbers or vectors whose components are complex numbers or qaternions?
 
jedishrfu said:
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?
 
jedishrfu said:
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.

jedishrfu said:
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][[1]]

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:
  • Like
Likes jedishrfu and member 428835

Similar threads

Replies
6
Views
1K
Replies
2
Views
2K
Replies
5
Views
2K
Replies
13
Views
2K
Replies
3
Views
6K
Replies
2
Views
3K
Replies
5
Views
2K
Back
Top