如何在Matlab中制作表的有效列数

时间:2016-07-25 06:59:30

标签: matlab file printf

我正在尝试创建一个表并将复杂数据写入文件,但是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');

它也没有转移到下一栏

2 个答案:

答案 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(换行符)