回 帖 发 新 帖 刷新版面

主题:Fortran IMSL库 怎么求广义逆

小弟初学Fortran,对其语法甚是陌生,跌跌撞撞,偶有收获。

在涉及矩阵求逆时,不总是可逆,因此求助于广义逆的帮助。

网上搜到在IMSL库的函数 LSGRR 可以用,但是对其语法总是不慎了解,

 总是出错, 心灰意冷之下, 求助贵版。 


我的目的是, 输入一个矩阵A, 输出它的广义逆 A+ , 


恳请有用过的大侠 不吝赐教, 小弟先行谢过! [b]输入输出[/b]

回复列表 (共6个回复)

沙发


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

期待您的解答,在线等待中.....




板凳

用use LSGRR_int、use UMACH_int、use AMACH_int代替试试看
自带imsl的Fortran编译器?cvf还是ivf

3 楼


还是不行的啊,可能不是原因,但是还是给您砖家分数。

 您平时有用到广义逆吗?

我就是想知道命令怎么个用法??

4 楼

用:
use IMSL这句即可

5 楼

我指的如果用CVF6.6

6 楼

fortran有自带的求解宏函数  比如你求矩阵A的逆矩阵 可以直接写成 .i.A  其中.i.是指对某一矩阵求逆

我来回复

您尚未登录,请登录后再回复。点此登录或注册