在MATLAB

时间:2015-05-22 15:33:20

标签: string matlab

我最近对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

1 个答案:

答案 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])

应该通过循环Csprinf('%+d%+di\n', [real(C(1:2)); imag(C(1:2))])的元素来完成。