Kml?steqr2
LAPACK函数 ?STEQR 的修改版本(仅有V case),使用隐式QL或QR方法计算对称三对角矩阵的所有特征值和可选的特征向量。用于KML ScaLAPACK中,ScaLAPACK各进程可以调用该函数分别对分布式矩阵Q进行更新。仅有C格式接口,无fortran格式接口。
接口定义
C Interface:
int KmlSsteqr2(constint n, float*d, float*e, float*z, constint ldz, constint nr, float *work);
int KmlDsteqr2(const int n, double *d, double *e, double *z, const int ldz, const int nr, double *work);
参数
参数名 |
类型 |
描述 |
输入/输出 |
---|---|---|---|
N |
整数型 |
矩阵的行数/列数 |
输入 |
D |
KmlSsteqr2中为单精度浮点型数组 KmlDsteqr2中为双精度浮点型数组 |
维度为N 输入时,存放三对角矩阵的对角元素。 输出时,如果INFO为0,特征值升序排列 |
输入,输出 |
E |
KmlSsteqr2中为单精度浮点型数组 KmlDsteqr2中为双精度浮点型数组 |
维度为N-1 输入时,存放三对角矩阵的次对角线元素 输出时,E被销毁 |
输入 |
Z |
KmlSsteqr2中为单精度浮点型数组 KmlDsteqr2中为双精度浮点型数组 |
维度为N*N 输入时,存放正交矩阵 输出时,如果INFO为0,存放正交特征向量 |
输入,输出 |
LDZ |
整数型 |
矩阵Z的主维,LDZ >= max(1,N) |
输入 |
NR |
整数型 |
NR = MAX(1, NUMROC( N, NB, MYPROW, 0, NPROCS ) ) |
输入 |
WORK |
KmlSsteqr2中为单精度浮点型数组 KmlDsteqr2中为双精度浮点型数组 |
工作数组,维度为max(1,2*N-2) |
输入 |
依赖
#include "klapack.h"
示例
C Interface:
const int n = 4; const int ldz = 4; const int nr = 2; double d[] = {14.1234, 15.5678, 16.9012, 17.3456}; double e[] = {18.7890, 19.1234, 20.5678, 21.9012}; double *z = (double *)malloc(ldz * n * sizeof(double)); // 1st column z[0 * ldz + 0] = 0.5; z[0 * ldz + 1] = 0.5; z[0 * ldz + 2] = 0.5; z[0 * ldz + 3] = 0.5; // 2nd column z[1 * ldz + 0] = 0.5; z[1 * ldz + 1] = -0.5; z[1 * ldz + 2] = 0.5; z[1 * ldz + 3] = -0.5; // 3rd column z[2 * ldz + 0] = 0.5; z[2 * ldz + 1] = 0.5; z[2 * ldz + 2] = -0.5; z[2 * ldz + 3] = -0.5; // 4th column z[3 * ldz + 0] = 0.5; z[3 * ldz + 1] = -0.5; z[3 * ldz + 2] = -0.5; z[3 * ldz + 3] = 0.5; double *work = (double *)malloc((2 * n - 2) * sizeof(double)); KmlDsteqr2(n, d, e, z, ldz, nr, work); /* * Output: d : -1.534857e+01 3.519426e+00 2.804530e+01 4.772184e+01 z : -1.449053e-03 2.307024e-01 -8.569433e-02 9.692424e-01 -9.756888e-01 1.491886e-03 -2.181372e-01 -2.110012e-02 5.000000e-01 5.000000e-01 -5.000000e-01 -5.000000e-01 5.000000e-01 -5.000000e-01 -5.000000e-01 5.000000e-01 */