主题:fortran里如何求逆矩阵?
yangjio4849 [专家分:30] 发布于 2006-10-05 14:08:00
我没有学过什么线性代数,对于如何求逆的算法不太明白,自己写不出来。
如果哪位大虾能贴一个子程序出来,就一个输入的3×3矩阵及一个结果的逆矩阵,我将非常感谢!
或者有哪位告诉一下在哪个函数库里面有调用的也行,我是在LINUX下面编程的。
回复列表 (共11个回复)
沙发
kaierme [专家分:970] 发布于 2006-10-05 15:42:00
use imsl
real a(3,3),b(3,3)
a=...
b=.i.a
即可
板凳
kaierme [专家分:970] 发布于 2006-10-05 15:45:00
如上楼,假设b是a的逆矩阵,a矩阵的赋值是你自己的代码,我用a=...表示,你用自己的代码替换即可
3 楼
yangjio4849 [专家分:30] 发布于 2006-10-05 16:18:00
imsl是Visual Fortran里面用的一个函数库吧?
我是在“LINUX”下面写程序的。
4 楼
yangjio4849 [专家分:30] 发布于 2006-10-06 00:08:00
没有人求逆了吗?
5 楼
齐东野人 [专家分:1920] 发布于 2006-10-06 05:24:00
IMSL是个商业的库,有Fortran和C的版本,也有window和linux版本。
商业库是很贵的,呵呵。还是尽量不要用,免得给单位和自己带来麻烦。
清华大学 出的《FORTRAN常用算法程序集》,里面有矩阵求逆
6 楼
yangjio4849 [专家分:30] 发布于 2006-10-06 08:54:00
呵呵,谁有这书的电子版本?我可不想去买一本。
[quote]IMSL是个商业的库,有Fortran和C的版本,也有window和linux版本。
商业库是很贵的,呵呵。还是尽量不要用,免得给单位和自己带来麻烦。
清华大学 出的《FORTRAN常用算法程序集》,里面有矩阵求逆[/quote]
7 楼
kongliang01 [专家分:20] 发布于 2006-10-10 15:33:00
楼上的留个邮箱我发给你
8 楼
physics [专家分:20] 发布于 2006-10-10 22:46:00
SUBROUTINE gjcp(A,N)
integer N
real A(N,N) !存放矩阵A
INTEGER IP(N) !记录主列号
REAL P !工作单元,放主元
INTEGER I0,R !工作单元,放主列号
EPS=0.001
write(*,*)'gjcp ok0000000'
DO K=1,N
P=0
I0=K
IP(K)=K
DO I=K,N
IF(ABS(A(I,K)).GT.ABS(P))THEN
P=A(I,K)
I0=I
IP(K)=I
ENDIF
ENDDO
IF(ABS(P).LE.EPS)THEN
WRITE(*,*)'DET=0'
stop !后来加的
GOTO 10
ENDIF
IF(I0.NE.K)THEN
DO J=1,N
S=A(K,J)
A(K,J)=A(I0,J)
A(I0,J)=S
ENDDO
ENDIF
A(K,K)=1./P
DO I=1,N
IF(I.NE.K)THEN
A(I,K)=-A(I,K)*A(K,K)
DO J=1,N
IF(J.NE.K)THEN
A(I,J)=A(I,J)+A(I,K)*A(K,J)
ENDIF
ENDDO
ENDIF
ENDDO
DO J=1,N
IF(J.NE.K)THEN
A(K,J)=A(K,K)*A(K,J)
ENDIF
ENDDO
ENDDO
write(*,*)'gjcp ok01'
DO K=N-1,1,-1
R=IP(K)
IF(R.NE.K)THEN
DO I=1,N
S=A(I,R)
A(I,R)=A(I,K)
A(I,K)=S
ENDDO
ENDIF
ENDDO
10 write(*,*)'the end'
END
9 楼
dawu [专家分:0] 发布于 2007-08-23 13:49:00
楼上的求逆算法是针对任意矩阵还是有对特殊矩阵而言的?比如要求是正定矩阵或者对称矩阵之类??
10 楼
dawu [专家分:0] 发布于 2007-08-23 14:17:00
验证了,非对称是可以的。呵呵,至于正定的影响,似乎没有查到正定与否对矩阵求逆有影响。
谢谢楼上的楼上的。
我来回复