回 帖 发 新 帖 刷新版面

主题:[讨论]关于CVF下的IMSL以及彭国论的《fortran95程序设计》中说明

彭国论的《fortran95程序设计》第16章给出了很多在fortran中直接使用的imsl库函数,
问题在IMSL只带的pdf文件说明中根本就找不到说明,
因为pdf中给出的都是subroutine并非function,
比如我要使用cholesky分解,
书上给出的是chol(A)即可;

但imsl库说明文件MATH.PDF中给出的是:
CALL LCHRG (N, A, LDA, PIVOT, IPVT, FAC, LDFAC)

subroutine比function控制选项多,用起来有时候麻烦,但有其好处

显然彭国论的《fortran95程序设计》给的imsl的库函数在软件的说明中找不到(至少我找了几个是没有的),
那么他书中给出的又是从哪里获得的?并且的确可用,

编书时考虑篇幅是否省略了很多?还有其他的么?

谢谢讨论。


ps:
在用imsl库的cholesky分解的subroutine时:
LCHRG/DLCHRG (Single/Double precision)
Compute the Cholesky decomposition of a symmetric positive semidefinite
matrix with optional column pivoting.

Usage
CALL LCHRG (N, A, LDA, PIVOT, IPVT, FAC, LDFAC)
Arguments
N — Order of the matrix A. (Input)
A — N by N symmetric positive semidefinite matrix to be decomposed. (Input)
Only the upper triangle of A is referenced.
LDA — Leading dimension of A exactly as specified in the dimension statement
of the calling program. (Input)
PIVOT — Logical variable. (Input)
PIVOT = .TRUE. means column pivoting is done. PIVOT = .FALSE. means no
pivoting is done.
IPVT — Integer vector of length N containing information that controls the
selection of the pivot columns. (Input/Output)
On input, if IPVT(K) > 0, then the K-th column of A is an initial column; if
IPVT(K) = 0, then the K-th column of A is a free column; if IPVT(K) < 0, then
the K-th column of A is a final column. See Comments. On output, IPVT(K)
contains the index of the diagonal element of A that was moved into the K-th
position. IPVT is only referenced when PIVOT is equal to .TRUE..
FAC — N by N matrix containing the Cholesky factor of the permuted matrix in
its upper triangle. (Output)
If A is not needed, A and FAC can share the same storage locations.
LDFAC — Leading dimension of FAC exactly as specified in the dimension
statement of the calling program. (Input)

结果我定义了COMPLEX(KIND=8)::S(n,n)
说数据类型不对:
K1.F90(120) : Error: The type of the actual argument differs from the type of the dummy argument.   [S]

suhroutine的说明也没说不支持复矩阵的分解!诡异。




回复列表 (共4个回复)

沙发

"LCHRG/DLCHRG (Single/Double precision)", 这个或者就说明了不支持复矩阵了吧.
你贴的信息完整吗? IMSL的函数说明竟然没表明类型...

板凳


谢谢回复,
首先,个人猜测仅通过double和single没法判断是否支持complex,
因为里面的fft变换支持complex,但其说明如下:
FFTCB/DFFTCB (Single/Double precision)
Compute the complex periodic sequence from its Fourier coefficients.
Usage
CALL FFTCB (N, COEF, SEQ)
Arguments
N — Length of the sequence to be transformed. (Input)
COEF — Complex array of length N containing the Fourier coefficients. (Input)
SEQ — Complex array of length N containing the periodic sequence. (Output)

可见是否支持复数在于其说明中;

其次,imsl中有一下几种cholesky分解的subroutine:
LCHRG/DLCHRG (Single/Double precision)
Compute the Cholesky decomposition of a symmetric positive semidefinite
matrix with optional column pivoting.

LUPCH/DLUPCH (Single/Double precision)
Update the R7R Cholesky factorization of a [color=FF0000]real symmetric positive definite[/color]
matrix after a rank-one matrix is added.


LDNCH/DLDNCH (Single/Double precision)
Downdate the R7R Cholesky factorization of a[color=800000] real symmetric [/color]positive definite
matrix after a rank-one matrix is removed.


可见LCHRG/DLCHRG应该是可以用于复矩阵的。


3 楼

这个是introduction里面的命名规则一部分:
Naming Conventions
The names of the routines are mnemonic and unique. Most routines are available in both a single
precision and a double precision version, with names of the two versions sharing a common root.
The root name is also the generic interface name. The name of the double precision specific
version begins with a “D_.” The single precision specific version begins with an “S_”. For
example, the following pairs are precision specific names of routines in the two different
precisions: S_GQRUL/D_GQRUL (the root is “GQRUL ,” for “Gauss quadrature rule”) and
S_RECCF/D_RECCF (the root is “RECCF,” for “recurrence coefficient”). The precision specific
names of the IMSL routines that return or accept the type complex data begin with the letter “C_”
or “Z_” for complex or double complex, respectively. Of course, the generic name can be used as
an entry point for all precisions supported.


我也看了一下快速傅立叶变换的函数, 那里虽然也只有S_ 和D_ 函数, 但输入变量写明是complex. 这个我也很不解. 相比也是intel出的函数库MKL, 那个3千多页的, 详细到觉得有点啰嗦说明, IMSL这个math说明太简单了些. 而且发现IMSL的说明里面(随手翻翻)大多有些变量类型, 有部分没有, 不知道是另有意思还是漏掉了.

4 楼


深圳华信群英科技有限公司,目前主要从事软件外包开发、高级软件人才定向输送等业务,面对日益严峻的大学生就业难和IT企业招聘难,自2006以来,与知名通信软件公司正式签订定向输送人才的合作协议,针对想进入软件行业的人员提供企业实训,实训课程采用“2+3”分段教学模式,分为2个月理论强化和3个月项目实训两个阶段,共计900学时。
企业订单委培,内训前签订就业安置协议,100%保证就业。实训结束之后,在华信群英科技及其战略合作伙伴从事通信软件研发工作。欢迎有意向者加QQ:649846168咨询。

我来回复

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