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

时间:2016-09-11 03:32:15

标签: matlab format octave complex-numbers

复数在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)"的输出。在命令窗口:

>> 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)"显示正确的结果没有回车。 另一方面,"真实(Y),想象(Y)"显示奇怪的结果与回车。 (顺便问一下,他们是什么?)

我需要一个解决方案: " num2str(Y)"回车  要么 "实际(Y),IMAG(Y)"结果正确。

我提到: How do you format complex numbers for text output in matlab

1 个答案:

答案 0 :(得分:3)

如果使用数组调用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