这个程序如何实现?请高手帮忙。
现在一个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 编辑 ] for ii = 3:55,
a(:,ii) = a(:,ii)-a(:,ii+1);
a(:,ii+1) = [];
end
最后序列维数20480*170 这样编好象也不正确啊,算得的结果并不正确。
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 for i=3,53
是冒号,不是逗号 改成“冒号”后还是得不出正确结果啊。
[ 本帖最后由 yxb345 于 2007-3-30 14:47 编辑 ] 我也试过了;
回复 #1 yxb345 的帖子
for ii =3:2:107a(:,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]