忠诚2008 发表于 2010-8-1 16:14:40

MATLAB读写求助?

总共100个循环,MATLAB可以在每个循环结束后,打开同一个记事本,在不同的列写入这个循环的数据吗,像excel一样。我现在只能在第一列写入最后一个循环的数据。或者有别的方法。谢谢!

忠诚2008 发表于 2010-8-1 18:21:38

matlab程序求助?

有下面一段代码:fid=fopen('e:\qieshen.txt','w');wn=2*500*pi;ipson=0.038;k=4500;k_t=2400;k_r=0.9;N=2;en=0;for u=0.01:0.01:1;ex=acos(1-u);ayy=0.5*(-cos(2*ex)-2*k_r*ex-k_r*sin(2*ex))-0.5*(-cos(2*en)-2*k_r*en-k_r*sin(2*en));for w=2000:1:10000s=i*w;d=w/wn;G_y=wn^2/(k*(wn^2+s^2+2*ipson*wn*s));ap=1/((N/2*pi)*ayy*k_t*real(G_y));fprintf(fid,'%f\r\n',ap);endendfclose(fid);我想每一个u循环,打开一个记事本,写入一组数据,可现在MATLAB把所有数据都写入到一个记事本一个列,数据量太大,无法处理;哪位大哥帮帮忙解决一下。

lengyunfeng 发表于 2010-8-1 21:29:41

本帖最后由 lengyunfeng 于 2010-8-1 22:06 编辑

txt的书写格式就是一行接一行的,你要按excel格式写完一列再写第二列难度有点大,个人还没想到怎么用Matlab来实现这一功能。不过你的这个程序可以通过变换内外循环的顺序,改为先按行处理,然后再用列处理来实现。下面这些代码仅供参考:fid=fopen('e:\qieshen.txt','w');
wn=2*500*pi;
ipson=0.038;
k=4500;
k_t=2400;
k_r=0.9;
N=2;
en=0;
for w=2000:1:10000
    s=i*w;
    d=w/wn;
    G_y=wn^2/(k*(wn^2+s^2+2*ipson*wn*s));
    for u=0.01:0.01:1
      ex=acos(1-u);
      ayy=0.5*(-cos(2*ex)-2*k_r*ex-k_r*sin(2*ex))-0.5*(-cos(2*en)-2*k_r*en-k_r*sin(2*en));
      ap=1/((N/2*pi)*ayy*k_t*real(G_y));
      if u==1
            fprintf(fid,'%6.2f\n',ap);
      else
            fprintf(fid,'%6.2f\t',ap);
      end
    end
end
fclose(fid);btw,多重大循环以及在循环体内进行I/O文件操作虽然便于理解,但是比较耗时间(我这段代码运行用了30几秒,真是失败),而且I/O操作可能还受循环体其它成分所限无法完全实现你的想法(比如按列书写在循环体内很麻烦,但只要有了现成的矩阵数据就非常简单了),所以建议lz采用5#bainhome兄的思路来得好些。

bainhome 发表于 2010-8-1 21:31:18

个人感觉没有任何这种必要,循环结束全部一次读入即可。

bainhome 发表于 2010-8-1 21:35:38

为什么不一次在MATLAB把该处理和计算的数据全部弄完,最后才做数据I/O?无论是每组数据放一个记事本还是放在同一个记事本里都不是很麻烦。
ps:计算部分不能矢量化,非要循环吗?
页: [1]
查看完整版本: MATLAB读写求助?