我最近对sprintf的一些行为感到困惑。在我看来,它似乎不一致,我无法确切地确定其某些行为背后的逻辑。这是一个困扰我的案例
C = [1 + 2i, 3+ 4i, 5+6i, 7+8i, 9+10i];
>> sprintf('%+d%+di\n',real(C(1:2)),imag(C(1:2)))
ans =
+1+3i
+2+4i
>> sprintf('%+d%+di\n',real(C(1:3)),imag(C(1:3)))
ans =
+1+3i
+5+2i
+4+6i
我希望它能像C一样打印我的复数。我是否需要明确创建一个新的交错输入向量?当涉及到不同的类型时,我觉得这是有问题的。
编辑:我觉得预期的输出应该是
>> sprintf('%+d%+di\n',real(C(1:2)),imag(C(1:2)))
ans =
+1+2i
+3+4i
>> sprintf('%+d%+di\n',real(C(1:3)),imag(C(1:3)))
ans =
+1+2i
+3+4i
+5+6i
答案 0 :(得分:4)
您提供的sprintf命令的行为为sprintf('%+d%+di\n', [1, 3], [2, 4])
,因为real(C(1:2))
返回[1,3]并且imag(C(1:2))
返回[2,4],其行为与您观察到的相同。
您要做的是:sprintf('%+d%+di\n', [1, 3; 2, 4])
应该通过循环C
或sprinf('%+d%+di\n', [real(C(1:2)); imag(C(1:2))])
的元素来完成。