導航:首頁 > 編程語言 > 編程求逆矩陣

編程求逆矩陣

發布時間: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

閱讀全文

與編程求逆矩陣相關的資料

熱點內容
如何把命令框里的輸出到窗口 瀏覽:529
離線版mc如何開伺服器 瀏覽:884
結對程序員 瀏覽:764
使用過的蘋果手機怎麼同步app 瀏覽:344
phpcookie無效 瀏覽:954
python可以搜數學答案 瀏覽:706
均線衍生指標源碼設置 瀏覽:496
做精一張圖pdf 瀏覽:851
編程培訓小朋友 瀏覽:787
巴克球製作解壓 瀏覽:851
測量參數時接單片機的 瀏覽:116
手機音樂添加文件夾 瀏覽:546
百度智能雲b18怎麼刪除app 瀏覽:968
單片機中為什麼顯示找不到頭文件 瀏覽:151
iisweb伺服器如何重啟 瀏覽:838
微信沒有適配方舟編譯器 瀏覽:81
箍筋加密區梁的凈高 瀏覽:889
samp如何加入外國伺服器 瀏覽:895
保鮮膜解壓教學視頻 瀏覽:983
台達plc編程通訊管理軟體 瀏覽:407