两种格式在 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
关于 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
复数在 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
关于 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