Convert near zero complex parts to 0

11 views (last 30 days)
In R2020a, I took a complex vector and converted near zero parts to zero. It took two long lines to do it. Can it be done in one line and not so long lines?
yyFix = yy;
yyFix( abs( real(yyFix) ) < 1e-10 ) = 1j * imag(yyFix( abs( real(yyFix) ) < 1e-10 ) );
yyFix( abs( imag(yyFix) ) < 1e-10 ) = real(yyFix( abs( imag(yyFix) ) < 1e-10 ));
The good output is:
yy =
1 + 0i
6.12323399573677e-17 + 1i
-1 + 1.22464679914735e-16i
-1.83697019872103e-16 - 1i
yyFix =
1 + 0i
0 + 1i
-1 + 0i
0 - 1i
I see that eps = 2.22044604925031e-16, but I would like to zero out the real and/or imag parts that are not as close to zero as eps.
<<EDIT 2021-04-01>> The +/-1 yy values can have arbitrary amplitudes. I assume that length(yy) > 1e8 for each signal section and/or input file.

Accepted Answer

Alan Stevens
Alan Stevens on 1 Apr 2021
Does the following do what you want
yyFix = round(yy*10^n)/10^n;
where you choose n as desired.
Paul Hoffrichter
Paul Hoffrichter on 2 Apr 2021
Thanks. I will keep this Mex thought in mind and ask another question some time since I don't get how that would work. Another day. :)

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!