yxb345 发表于 2007-3-29 18:54

这个程序如何实现?请高手帮忙。

现在一个20480*223的一个矩阵,现要将其中的第3~108列中的相邻两列相减合并,即3,4列合并,5,6列合并,……107,108列合并,109列以后不变。合并后的矩阵应该是20480*170的。请问如何用MATLAB或FORTRAN实现?我用FORTRAN编写程序如下,但是结果不正确

                               real a(20480,223)               
               open(unit=1,file='scan000.txt',STATUS='OLD')
               open(unit=2,file='s000.txt',STATUS='new')               
               read(1,*)((a(i,j),j=1, 223) ,i=1,20480)
               do10 i=1,20480
                        do 20 j=1,223
                           if(j.ge.4.and.j.le.108.and.mod(j,2).eq.0) then
                              a(i,j-1)=a(i,j-1)- a(i,j)
                           else          
                          end if
        20      continue
        10   continue   
                  write(2,*)((a(k,m),m=1,170),k=1,20480)

                      close(1)
                      close(2)
                      end

[ 本帖最后由 yxb345 于 2007-3-29 20:31 编辑 ]

w89986581 发表于 2007-3-29 20:19

for ii = 3:55,
    a(:,ii) = a(:,ii)-a(:,ii+1);
    a(:,ii+1) = [];
end

最后序列维数20480*170

yxb345 发表于 2007-3-29 20:57

这样编好象也不正确啊,算得的结果并不正确。
SourcePath='D:\MATLAB6p5\work\scan000.txt';% 指定文件路径
fid1=fopen(SourcePath,'r');
A00=fread(fid1,,'float');
for i=3,53
    A00(:,i)=A00(:,i)-A00(:,i+1)
    A00(:,i+1) = [];
end

fclose(fid1);
save s00.txt A00 -ascii

eight 发表于 2007-3-29 21:02

for i=3,53

是冒号,不是逗号

yxb345 发表于 2007-3-30 10:58

改成“冒号”后还是得不出正确结果啊。

[ 本帖最后由 yxb345 于 2007-3-30 14:47 编辑 ]

海底龙城 发表于 2007-3-30 17:02

我也试过了;

rainbowolf 发表于 2007-4-7 20:13

回复 #1 yxb345 的帖子

for ii =3:2:107
    a(:,ii) = a(:,ii)-a(:,ii+1);

   end
for b=4:54
a(:,b)=[];
end
这个应该可以吧
因为当a(:,b)=[];运行一次后(删除第4列),
a矩阵大小即变为a(m,n-1)
也就是以前的n列现在为n-1列,
所以要清空的那列为原矩阵的第6列,
即变为第5列所以用
for b=4:54
a(:,b)=[];
end
即可得

[ 本帖最后由 rainbowolf 于 2007-4-7 21:18 编辑 ]
页: [1]
查看完整版本: 这个程序如何实现?请高手帮忙。