Complex double Array converts to double array after assignment

조회 수: 97 (최근 30일)
Vids deo
Vids deo 2016년 9월 27일
댓글: Walter Roberson 2016년 9월 27일
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 ??

채택된 답변

Walter Roberson
Walter Roberson 2016년 9월 27일
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
Walter Roberson
Walter Roberson 2016년 9월 27일
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.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Massimo Zanetti
Massimo Zanetti 2016년 9월 27일
편집: Massimo Zanetti 2016년 9월 27일
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
Vids deo
Vids deo 2016년 9월 27일
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

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Numeric Types에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by