我一直试图打印一些复杂的数字。如果复数(modTrace)就像'a-ib'那么我的代码:
modTrace
v = [real(modTrace(:)) imag(modTrace(:))].';
fprintf(fileID,'%e+%ei\n',v);
将输出显示为:
2.355387e-13+-7.217925e-13i
为了避免在我写的负片假想片前面加上额外的+号:
v = [real(modTrace(:)) imag(modTrace(:))].';
if imag(modTrace(:))>0
fprintf(fileID,'%e+%ei\n',v);
else
fprintf(fileID,'%e%ei\n',v);
end
现在在输出中'if'没有被执行。所以,如果我有一个复数'a + ib',它会打印出来 'a bi'如果复数是'a-ib',它会根据else语句打印'a-bi'。
如果我然后修改代码,如:
v = [real(modTrace(:)) imag(modTrace(:))].';
if imag(modTrace(:))<0
fprintf(fileID,'%e%ei\n',v);
else
fprintf(fileID,'%e+%ei\n',v);
end
然后再次'if'语句没有被执行。因此,对于复数'a-ib',输出是'a + -bi'并且'else'语句正确执行。
有没有人可以帮我找到正确形式的输出? 谢谢。
答案 0 :(得分:2)
我认为在这种情况下你最好使用循环:
for k = 1:length(modTrace)
if imag(modTrace(k))>0
fprintf(fileID,'%e+%ei\n',real(modTrace(k)), imag(modTrace(k)));
else
fprintf(fileID,'%e%ei\n',real(modTrace(k)), imag(modTrace(k)));
end
end
你无法轻易地向量化它,因为如果你将一个向量传递给if
它只会在(http://www.mathworks.com/help/matlab/ref/if.html)时评估为真:
结果是非空的并且包含所有非零元素(逻辑或 真正的数字)。否则,表达式为false。