主题:Fortran IMSL库 怎么求广义逆
fridaywu
[专家分:0] 发布于 2012-04-22 17:08:00
小弟初学Fortran,对其语法甚是陌生,跌跌撞撞,偶有收获。
在涉及矩阵求逆时,不总是可逆,因此求助于广义逆的帮助。
网上搜到在IMSL库的函数 LSGRR 可以用,但是对其语法总是不慎了解,
总是出错, 心灰意冷之下, 求助贵版。
我的目的是, 输入一个矩阵A, 输出它的广义逆 A+ ,
恳请有用过的大侠 不吝赐教, 小弟先行谢过! [b]输入输出[/b]
回复列表 (共6个回复)
沙发
fridaywu [专家分:0] 发布于 2012-04-22 22:10:00
program main
USE IMSL_LIBRARIES
! Declare variables
PARAMETER (NRA=3, NCA=2, LDA=NRA, LDGINV=NCA)
REAL A(LDA,NCA), GINV(LDGINV,NRA)
!
! Set values for A
!
! A = ( 1 0 )
! ( 1 1 )
! ( 100 -50 )
! `
DATA A/1., 1., 100., 0., 1., -50./
!
! Compute generalized inverse
TOL = AMACH(4)
TOL = 10.*TOL
CALL LSGRR (A, GINV,TOL=TOL, IRANK=IRANK)
! Print results
CALL UMACH (2, NOUT)
WRITE (NOUT, *) 'IRANK = ', IRANK
CALL WRRRN ('GINV', GINV)
!
end program main
我将LSGRR中的那个例子 复制到fortran中运行时,有几处错误:
1, Error: Error in opening the Library module file. [IMSL_LIBRARIES]
USE IMSL_LIBRARIES
2,Error: Keyword arguments are invalid without an explicit interface. [TOL]
CALL LSGRR (A, GINV,TOL=TOL, IRANK=IRANK)
3,Keyword arguments are invalid without an explicit interface. [IRANK]
CALL LSGRR (A, GINV,TOL=TOL, IRANK=IRANK)
我的是fortran95 默认有安装IMSL库的, 但是依照错误貌似没有IMSL_LIBRARIES这个库,这个如何处置? 另外两个错误, 我也莫名其妙,因为代码就是以下链接复制的:
http://www.roguewave.com/Portals/0/products/imsl-numerical-libraries/fortran-library/docs/6.0/math/lsgrr.htm
期待您的解答,在线等待中.....
板凳
alsoran [专家分:760] 发布于 2012-04-23 16:04:00
用use LSGRR_int、use UMACH_int、use AMACH_int代替试试看
自带imsl的Fortran编译器?cvf还是ivf
3 楼
fridaywu [专家分:0] 发布于 2012-04-26 15:54:00
还是不行的啊,可能不是原因,但是还是给您砖家分数。
您平时有用到广义逆吗?
我就是想知道命令怎么个用法??
4 楼
marchz [专家分:30] 发布于 2012-05-21 16:29:00
用:
use IMSL这句即可
5 楼
marchz [专家分:30] 发布于 2012-05-21 16:29:00
我指的如果用CVF6.6
6 楼
llqq [专家分:0] 发布于 2012-05-22 11:43:00
fortran有自带的求解宏函数 比如你求矩阵A的逆矩阵 可以直接写成 .i.A 其中.i.是指对某一矩阵求逆
我来回复