我正在尝试使用 ARPACK 提供的 fortran 函数在 C++ 中编写一个驱动程序来计算不对称实值稀疏矩阵的特征值,但是我在使用反向通信方法时遇到了一些麻烦。
一般来说,我试图解决正常的特征值方程:
A*v = lambda*v
并且与矩阵 A 的任何交互都是通过函数 'av' 在 ARPACK 中完成的:
av(n, workd[ipntr[0]], workd[ipntr[1]])
它将数组'workd'中从位置'ipntr [0]'开始的向量相乘,并将结果插入从位置'ipntr [1]'开始的数组'workd'中。此方法的示例在http://www.caam.rice.edu/software/ARPACK/的手册中以及 ARPACK/EXAMPLES/SIMPLE/dnsimp.f 代码中给出。
我想知道的是我如何实际涉及矩阵A?如果它没有传递给例程,那么如何找到它对提供的向量的作用?
在示例代码 dnsimp.f 中,它们的矩阵 A 在函数“av”内计算,并且“源自二维对流-扩散算子的标准中心差分离散化”。但是,我相信这是特定于问题的?将矩阵 A 的推导编码到函数中似乎也不太有用。我也无法从手册中找到太多关于此的信息。
这似乎不是什么大问题,因为它是一个用户定义的函数,我可以更改“av”的定义以将矩阵 A 作为参数包含在内。但是,我想知道如果出现任何潜在的兼容性问题,它是如何正确完成的。
谢谢!