Fortran除法:假如有两个20*20的二维数组A,B(相当于矩阵),怎么编程得到C=A\B?
1个回答
展开全部
fortran77 程序,供参考。
==============================================
real a(20,20),b(20,20),d(20,20)
n=5
open(3,file='mat_div.in')
do 10 i=1,n
read(3,*) (a(i,j),j=1,n)
10 continue
call printmat(a,n)
do 13 i=1,n
read(3,*) (b(i,j),j=1,n)
13 continue
close(3)
call printmat(b,n)
call inverse(b,n)
call printmat(b,n)
do 20 i=1,n
do 20 j=1,n
d(i,j)=0
do 21 k=1,n
d(i,j)=d(i,j)+a(i,k)*b(k,j)
21 continue
20 continue
call printmat(d,n)
end
c ************************************
c 求逆矩阵,结果还是放在b中回带
c ************************************
subroutine inverse(b,n)
dimension b(20,20),c(20,40)
do 2 i=1,n
do 2 j=1,n
c(i,j)=b(i,j)
c(i,j+n)=0
2 continue
do 4 i=1,n
c(i,i+n)=1
4 continue
do 10 k=1,n
do 20 j=n*2,k,-1
20 c(k,j)=c(k,j)/c(k,k)
do 40 i=1,n
if (i.ne.k) then
do 30 j=n*2,k,-1
30 c(i,j)=c(i,j)-c(i,k)*c(k,j)
endif
40 continue
10 continue
do 50 i=1,n
do 50 j=1,n
b(i,j)=c(i,j+n)
50 continue
return
end
c ****************************
c 输出矩阵
c ****************************
subroutine printmat(a,n)
dimension a(20,20)
do 10 i=1,n
do 20 j=1,n
write(*,'(1x,f10.3,\)') a(i,j)
20 continue
write(*,*)
10 continue
write(*,*)
return
end
===============================================
输入试验数据:
1.0 2.0 3.0 4.0 5.0
2.0 3.0 4.0 5.0 1.0
3.0 4.0 5.0 1.0 2.0
4.0 5.0 1.0 2.0 3.0
5.0 1.0 2.0 3.0 4.0
10 11 12 13 14
12 13 14 1 2
16 7 8 14 60
5 4 3 2 1
1 4 9 16 25
追答
用90改写本程序应该很容易吧!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询