如果/ else语句没有执行'如果'声明

时间:2014-04-10 15:00:52

标签: matlab

我一直试图打印一些复杂的数字。如果复数(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'语句正确执行。

有没有人可以帮我找到正确形式的输出? 谢谢。

1 个答案:

答案 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。