鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

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