导航:首页 > 编程语言 > 编程求逆矩阵

编程求逆矩阵

发布时间:2023-06-03 13:34:26

⑴ 哭求:fortran语言矩阵求逆的程序

这是一段f90的代码,使用是时候要加上use inv_mat,然后就可以求某方阵的逆矩阵了。
mole inv_mat
! Description : 计算逆矩阵
contains
subroutine inv(A,invA,N)
! Purpose : 计算逆矩阵
!-----------------------------------------------------
! Input parameters :
! 1. A: 需要求逆的矩阵
! 2. N: 矩阵的维度
! Output parameters :
! 1. invA: A的逆矩阵
implicit real*8(a-z)
integer::n
integer::i
real*8::A(n,n),invA(n,n),E(n,n)
E=0
!设置E为单位矩阵
do i=1,n
E(i,i)=1
end do
call mateq(A,E,invA,N,N)
end subroutine inv
subroutine mateq(A,B,X,N,M)
! Purpose : 高斯列主元消去法计算矩阵方程
! AX=B
implicit real*8(a-z)
integer::N,M,i
real*8::A(N,N),B(N,M),X(N,M)
real*8::btemp(N),xtemp(N)
do i=1,M
btemp=B(:,i)
call elgauss(A,btemp,xtemp,N)
X(:,i)=xtemp
end do
end subroutine mateq
subroutine elgauss(A,b,x,N)
! Purpose : 高斯列主元消去法
! Ax=b
implicit real*8(a-z)
integer::i,k,N
integer::id_max !主元素标号
real*8::A(N,N),b(N),x(N)
real*8::Aup(N,N),bup(N)
!Ab为增广矩阵 [Ab]
real*8::Ab(N,N+1)
real*8::vtemp1(N+1),vtemp2(N+1)
Ab(1:N,1:N)=A
Ab(:,N+1)=b
do k=1,N-1
elmax=dabs(Ab(k,k))
id_max=k
do i=k+1,n
if (dabs(Ab(i,k))>elmax) then
elmax=Ab(i,k)
id_max=i
end if
end do
vtemp1=Ab(k,:)
vtemp2=Ab(id_max,:)
Ab(k,:)=vtemp2
Ab(id_max,:)=vtemp1
!#########################################################
do i=k+1,N
temp=Ab(i,k)/Ab(k,k)
Ab(i,:)=Ab(i,:)-temp*Ab(k,:)
end do
end do
Aup(:,:)=Ab(1:N,1:N)
bup(:)=Ab(:,N+1)
call uptri(Aup,bup,x,n)
end subroutine elgauss
subroutine uptri(A,b,x,N)
! Purpose : 上三角方程组的回带方法
! Ax=b
implicit real*8(a-z)
integer::i,j,N
real*8::A(N,N),b(N),x(N)
x(N)=b(N)/A(N,N)
!回带部分
do i=n-1,1,-1
x(i)=b(i)
do j=i+1,N
x(i)=x(i)-a(i,j)*x(j)
end do
x(i)=x(i)/A(i,i)
end do
end subroutine uptri
end mole inv_mat

⑵ fortran编程 逆矩阵

以下是求5阶方阵的逆矩阵,fortran77程序。供参考。


c 求逆矩阵
c 在主程序中,设两个数组a(5,5),b(5,5)
c a(5,5)--存放5阶方阵
c b(5,5)--存放单位阵
c 在子程序中,设一个数组c(5,10),该数组是a、b阵拼接起来的
c 要实现数组的拼接和拆分,用公用语句实现
reala(5,5),b(5,5)
common/x/a,b
do10i=1,5
do10j=1,5
if(i.eq.j)then
b(i,j)=1
else
b(i,j)=0
endif
10 continue
callinverse
write(*,20)b
write(*,*)
write(*,20)((b(i,j),j=1,5),i=1,5)
20 format(1x,5f10.3)
c read(*,*)
end
c************************************
subroutineinverse
realc(5,10)
common/x/c
do10k=1,5
do20j=10,k,-1
20 c(k,j)=c(k,j)/c(k,k)
do40i=1,5
if(i.ne.k)then
do30j=10,k,-1
30 c(i,j)=c(i,j)-c(i,k)*c(k,j)
endif
40 continue
10 continue
end
c******************************
blockdata
reala(5,5),b(5,5)
common/x/a,b
dataa/3,1,0,2,10,-2,0,1,3,1,9,3,1,0,1,
1 1,0,1,1,0,1,2,0,2,10/
end

阅读全文

与编程求逆矩阵相关的资料

热点内容
高三倒计时缓解压力 浏览:617
一捏就变形的解压玩具怎么折 浏览:196
易融贷app借钱怎么 浏览:939
单片机侧重点 浏览:867
江苏惠普服务器虚拟化设计云主机 浏览:647
在欧拉app好猫充电桩怎么申请 浏览:449
反编译代码教程 浏览:798
linuxio阻塞 浏览:973
8脚单片机pic 浏览:821
如何看彩色涂鸦遮住的字安卓 浏览:688
摆渡机器人编程 浏览:654
软程序员着装 浏览:139
宝鸡云存储服务器 浏览:668
推荐超解压游戏无广告 浏览:634
大华服务器怎么添加门禁 浏览:784
战地服务器60hz什么意思 浏览:760
成高级程序员学什么 浏览:501
阿里云接入备案后退掉服务器 浏览:928
ne40e命令 浏览:85
安卓输入法使用什么编码 浏览:184