复数在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
答案 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
关于real
和imag
的问题,问题是数组如何包含在模板中。在移动到下一个参数之前,一个参数中的所有元素都在模板中使用:
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