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
*/