How do you take the absolute value of only the complex number?

13 views (last 30 days)
I have a matrix of 128x256 filled with real and complex number; ex. -0.0115+0.0059i.
How do I take the absolute value of only the complex number so that it becomes -0.0115 + abs(0.0059i)?
I would like to apply this to all the cells in the matrix.
  1 Comment
James Tursa
James Tursa on 12 Nov 2021
Edited: James Tursa on 12 Nov 2021
Did you really mean abs(0.0059i) with the i inside the abs( ) function as written? Or did you just mean abs(imag coeff)*i?

Sign in to comment.

Answers (2)

Jon
Jon on 12 Nov 2021
Edited: Jon on 12 Nov 2021
x = -0.0115+0.0059i
xnew = real(x) + abs(imag(x))*i
  1 Comment
Jon
Jon on 12 Nov 2021
Edited: Jon on 12 Nov 2021
This will work for a m by n matrix too.
X = randn(128,256) + randn(128,256)*i;
Xnew = real(X) + abs(imag(X))*i

Sign in to comment.


Walter Roberson
Walter Roberson on 12 Nov 2021
NewArray = complex(real(YourArray), abs(imag(YourArray)));
or
NewArray = real(YourArray) + 1i .* abs(imag(YourArray));
Using complex() should be slightly more efficient.
There is a very slight difference in the results between the two: In the case where the imaginary components of the array are all 0, then the + 1i .* form would be adding 1i .* 0 which would all vanish and the end result in NewArray would be marked as entirely real-valued. But if you use complex() then even if the final result has all-zero in the imaginary component, the result will be marked as complex, and will have storage allocated for the complex part.
For most purposes, whether the all-zero imaginary part is stored or not makes no difference. But it can make a difference when you are calling library routines that are expecting a complex array, especially if you are expecting them to update the array "in-place"

Categories

Find more on Creating and Concatenating Matrices in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!