Convert near zero complex parts to 0
9 次查看(过去 30 天)
显示 更早的评论
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?
yy
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 ));
yyFix
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.
0 个评论
采纳的回答
Alan Stevens
2021-4-1
Does the following do what you want
yyFix = round(yy*10^n)/10^n;
where you choose n as desired.
6 个评论
Walter Roberson
2021-4-2
mex could, in some cases, work "in place", which would remove the need to create temporary variables for real and imaginary part, then temporary variables for the conditional results, and putting the results together.
Paul Hoffrichter
2021-4-2
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. :)
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!