我正在尝试创建一个表并将复杂数据写入文件,但是Matlab并没有移动列,所以无论我做什么,我都有两列用于实数和复数数据。我希望每列有两列(真实和复杂)。假设我的矩阵是X:
X=[1 2 3 4; 5 6 7 8; 9 10 11 12];
以下是我将获得的功能和输出:
function f_save(in)
FID=fopen('C:\Users\mehdi\Music\Saved_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');
答案 0 :(得分:0)
如果我理解你的问题,你想要这个:
for ii=1:n
for jj=1:m
fprintf(FID,'%3.10g\t%3.10gi\t',[real(in(jj,ii)) imag(in(jj,ii))]);
end
fprintf(FID,'\n');
end
这会为您提供m*2
列的输出。
答案 1 :(得分:0)
首先,real()和imag()以相反的方式工作,它们得到复数的实部和虚部,而不是复数的实数。想象它只是使用'我':
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(换行符)