两种格式在 Octave 中显示不同的复数

Two formats shows different complex numbers in Octave

复数在 Octave 中的显示方式因格式而异。 但是,我无法忍受任何格式(到目前为止)。

这是我的代码:

a = [-0.067000,-0.067000,-0.068000,-0.069000,-0.069000,-0.070000,-0.070000,-0.071000,-0.071000,-0.072000];
Y = fft(a);
  fprintf(comp_print_log,"%s\n",num2str(Y));
  fprintf(comp_print_log,"\n");
  fprintf(comp_print_log,'%7.4f%+7.4fj\n',real(Y),imag(Y));
fclose(comp_print_log);

这是 "fft(a)" 命令 window 的输出:

>> fft(a)
ans =

 Columns 1 through 8:

  -0.69400 + 0.00000i   0.00331 - 0.00828i   0.00281 - 0.00439i   0.00219 - 0.00277i   0.00169 - 0.00140i   0.00400 + 0.00000i   0.00169 + 0.00140i   0.00219 + 0.00277i

 Columns 9 and 10:

   0.00281 + 0.00439i   0.00331 + 0.00828i

这是输出:

-0.694+0i              0.003309-0.008282i       0.002809-0.004392i       0.002191-0.0027674i      0.001691-0.0014001i         0.004+0i              0.001691+0.0014001i      0.002191+0.0027674i      0.002809+0.004392i       0.003309+0.008282i

-0.6940+0.0033j
 0.0028+0.0022j
 0.0017+0.0040j
 0.0017+0.0022j
 0.0028+0.0033j
 0.0000-0.0083j
-0.0044-0.0028j
-0.0014+0.0000j
 0.0014+0.0028j
 0.0044+0.0083j

"num2str(Y)" 显示没有回车 return 的正确结果。 另一方面,"real(Y),imag(Y)" 显示带有回车 return 的奇怪结果。 (顺便说一句,他们是什么???)

我需要一个解决方案: "num2str(Y)" 带马车 return 要么 "real(Y),imag(Y)" 结果正确。

我指的是: How do you format complex numbers for text output in matlab

如果您使用一个数组调用 num2str,您将得到一个表示该数组的字符串。如果该数组是行向量,则返回一行字符串(全部为一行),如果数组是列向量,则每行返回一个元素:

octave> Y = [-0.694+0i 0.003309-0.008282i 0.002809-0.004392i  0.002191-0.0027674i];

octave> num2str (Y)
ans = -0.694+0i              0.003309-0.008282i       0.002809-0.004392i       0.002191-0.0027674i

octave> num2str (Y')
ans =

  -0.694-0i        
0.003309+0.008282i 
0.002809+0.004392i 
0.002191+0.0027674i

关于 realimag 的问题,问题在于如何将数组包含在模板中。在移动到下一个参数之前,一个参数中的所有元素都在模板中使用:

octave> printf ("%f %f\n", [1 2 3], [4 5 6])
1.000000 2.000000
3.000000 4.000000
5.000000 6.000000

这就是您得到错误答案的原因。在阅读虚部之前先阅读所有实部。您需要创建一个数组,其中这些值像这样交错(请记住,Octave 将读取每一列):

octave> printf ("%f %f\n", [real(Y)' imag(Y)']')
-0.694000 0.000000
0.003309 -0.008282
0.002809 -0.004392
0.002191 -0.002767