Índice de la cantidad con la menor parte real de un número complejo

0

Pregunta

Tengo un problema con algunos de los números complejos, que yo rara vez trabajan con. Mi problema es que tengo un array con los realizados por
cos^(-1)(x) donde x pueden ser valores más pequeños o más grandes |1|, por lo tanto, obtener algunos números complejos, necesito el índice del número con la menor parte real.

los datos de como se podría ver

[0 + 0.37i, 0 + 0.18i,  0.2 + 0.0i, 0.3 + 0.0i, 0.4 + 0.0i]

así que necesito el índice de 0.2 + 0.0i

lo que he probado hasta ahora es

[val_min_x,idx_min_x]=min(real(x)>0))

ya que necesito el menor valor de la parte real mayor que cero. Pero esto no funciona y supongo que es porque real(x>0) da verdadero o falso. Y, a continuación, tomar el mínimo de que sólo da el índice del primer cero.

Alguna sugerencia para solucionar esto sin una declaración de si?

complex-numbers matlab
2021-11-23 06:06:34
1

Mejor respuesta

0

Primero convertir todos los 0s 1s, por lo que min() no encontrarlos (por la adición de 1). A continuación, mantenga todo lo demás intacto (por la adición de 0). Un valor booleano truco de mantener todo en una sola línea, para mayor brevedad,

Gracias @CG

% example input
A=[0 + 0.37i, 0 + 0.18i, 0.2 + 0.0i, 0.3 + 0.0i, 0.4 + 0.0i]
% leveraging maximum cos(x)<=1 and boolean true being cast to 1
[~, idx] = min(real(A)+(real(A)==0))


A =

  Columns 1 through 3

   0.0000 + 0.3700i   0.0000 + 0.1800i   0.2000 + 0.0000i

  Columns 4 through 5

   0.3000 + 0.0000i   0.4000 + 0.0000i


idx =

     3
2021-11-23 09:23:22

Funciona estupendamente!! gracias!. Así que para entender, real(x)==0 hace que una matriz de 0 y 1, luego se le agrega la real(x) para que y encontrar el mínimo? funciona, pero me parece que no puede entender por qué?
Peter Panduro Jørgensen

Bueno, la idea es convertir todos los 0s 1s, por lo que min() no encontrarlos (por la adición de 1), y mantener todo lo demás intacto (por la adición de 0). El booleano truco mantiene todo en 1 línea de la brevedad, seguramente se le podría ampliado por el de la claridad.
wwweagle

[~, idx] = min(real(A)+(real(A)==0)). No hay necesidad de utilizar bucles (arrayfun es una disfrazado de bucle), cuando se realiza la misma operación en todos los elementos de una matriz.
CG.

@CG. Eso es correcto. Ahora es mucho menos apestoso. Gracias bro.
wwweagle

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................