Complex double Array converts to double array after assignment

42 visualizzazioni (ultimi 30 giorni)
Hi Experts,
a = [1 2; 3 4];
b = [1 2; 3 4];
c = complex(a,b);
a1 = complex(a,0);
a1(1,1) = complex(abs(c(2,2)),0);
Above assignment somehow converts 'a1' to a DOUBLE array instead of COMPLEX double. I'm using the above method for assignment to a 3D array (S-parameter processing) which is facing the same issue in a code. Why would this be happening ??

Risposta accettata

Walter Roberson
Walter Roberson il 27 Set 2016
complex arrays whose real parts are all completely 0 are fragile; as soon as you do anything to them, the all-zero imaginary part will fall off.
Consider that if you have
a = [1+2i, 3+0i]
a(imag(a)>0) = 0
then this would be like a(1) = 0, giving you a matrix [0, 3+0i]. People now expect that to degrade to [0, 3] rather than retaining its complex character just because it was formerly complex. Therefore, the complex parts are checked for all-zero after every assignment.
  1 Commento
Walter Roberson
Walter Roberson il 27 Set 2016
This is the way it is. It is considered a design feature.
If you want, you can use
if isreal(a1); a1 = complex(a1); end
But remember that if you then do a1+0 or a1*1 or anything with a1 other than assign all of it to another variable or pass it alone to a routine, then the complex part will promptly fall off again.

Accedi per commentare.

Più risposte (1)

Massimo Zanetti
Massimo Zanetti il 27 Set 2016
Modificato: Massimo Zanetti il 27 Set 2016
Sure it does, because a complex number with a NULL imaginary part is indeed real. Notice that in the call COMPLEX(a,0), you in fact sets the imaginary part to 0. If you want to create a complex number without imaginary part do this:
a1=complex(a);
This will give a1 as COMPLEX.
  1 Commento
Vids deo
Vids deo il 27 Set 2016
Hey Massimo,
The statement that you said only works with using complex(a) on complete matrix. It doesn't work the same way when used "element-wise" That is -
a1(1,1)=complex(a(2,1));
My operations are element-wise. And its screwing up the whole matrix to a real double (instead of complex double).
--Vidya

Accedi per commentare.

Categorie

Scopri di più su Resizing and Reshaping Matrices in Help Center e File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by