如何在Matlab中制作表格的任意列数



我正在尝试制作一个表并将复杂数据写入文件,但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列的输出。

相关内容

  • 没有找到相关文章

最新更新