我正在尝试制作一个表并将复杂数据写入文件,但Matlab没有移动列,所以无论我做什么,我都只有两列用于真实数据和复杂数据。我希望每列有两列(实数和复数)。所以假设我的矩阵是X:
X=[1 2 3 4; 5 6 7 8; 9 10 11 12];
以下是我将获得的功能和输出:
function f_save(in)
FID=fopen('C:UsersmehdiMusicSaved_file.txt','wt');
[m,n]=size(in);
for ii=1:n
for jj=1:m
fprintf(FID,'%3.10g %3.10gi n',[real(in(jj,ii)) imag(in(jj,ii))]);
end
fprintf('t t');
end
fclose(FID);
输出为:
1 0i
5 0i
9 0i
2 0i
6 0i
10 0i
3 0i
7 0i
11 0i
4 0i
8 0i
12 0i
但我想把输出分成6列,这样第一列就有自己的虚部和实部,以此类推
有人能告诉我为什么即使我有fprintf('t t');
首先,real()和imag()的工作方式相反,它们得到复数的实部和虚部,而不是复数的实数。只需使用"i":
a=1+2i
real(a) % is 1
imag(a) % is 2
如果你只想把数字写入一个文件,matlab不需要知道什么是实的和虚的。你可能已经意识到了这一点,但在这种情况下,取实数1到12是一个更糟糕的例子。
其次,您应该交换for循环。现在它正在为每一列和每一行做一些事情,但你必须反过来写。
FID=fopen('Saved_file.txt','wt');
in=[1 2 3 4; 5 6 7 8; 9 10 11 12];
[m,n]=size(in);
for ii=1:m %for each row
for jj=1:n %for each column
fprintf(FID,'%3.10g %3.10gi t',[real(in(ii,jj)) imag(in(ii,jj))]);
end
fprintf(FID,'n');
end
如果你愿意,你可以添加\t(制表符)。但是您需要在循环的行末尾添加一个\n(换行符)
如果我理解你的问题,你想要这个:
for ii=1:n
for jj=1:m
fprintf(FID,'%3.10gt%3.10git',[real(in(jj,ii)) imag(in(jj,ii))]);
end
fprintf(FID,'n');
end
这将为您提供m*2
列的输出。