Fortran除法:假如有两个20*20的二维数组A,B(相当于矩阵),怎么编程得到C=A\B?

请使用Fortran90或以上版本的Fortran语言... 请使用Fortran90或以上版本的Fortran语言 展开
 我来答
gcbjoy
2016-07-25 · TA获得超过1.1万个赞
知道大有可为答主
回答量:1.1万
采纳率:92%
帮助的人:2190万
展开全部
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改写本程序应该很容易吧!
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式