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

?steqr

使用QL或QR方法求解对称三对角矩阵的特征值和特征向量。

接口定义

C Interface:

ssteqr_(const char *compz, const int *n, float *d, float *e, float *z, const int *ldz, float *work, int *info);

dsteqr_(const char *compz, const int *n, double *d, double *e, double *z, const int *ldz, double *work, int *info);

csteqr_(const char *compz, const int *n, float *d, float *e, float _Complex *z, const int *ldz, float *work, int *info);

zsteqr_(const char *compz, const int *n, double *d, double *e, double _Complex *z, const int *ldz, double *work, int *info);

Fortran Interface:

SSTEQR(COMPZ, N, D, E, Z, LDZ, WORK, INFO);

DSTEQR(COMPZ, N, D, E, Z, LDZ, WORK, INFO);

CSTEQR(COMPZ, N, D, E, Z, LDZ, WORK, INFO);

ZSTEQR(COMPZ, N, D, E, Z, LDZ, WORK, INFO);

参数

参数

类型

说明

输入/输出

compz

字符型

  • 'N':只计算特征值。
  • 'V':计算特征值和特征向量。
  • 'I': 计算特征值和特征向量。

输入

n

整数型

矩阵的维度,n≥0。

输入

d

  • 在ssteqr中为单精度浮点型数组。
  • 在dsteqr中为双精度浮点型数组。
  • 在csteqr中为单精度浮点型数组。
  • 在zsteqr中为双精度浮点型数组。

长度为n。

  • 进入时:三对角矩阵的对角元素。
  • 退出时:若info=0,保存特征值,并以升序排列。

输入,输出

e

  • 在ssteqr中为单精度浮点型数组。
  • 在dsteqr中为双精度浮点型数组。
  • 在csteqr中为单精度浮点型数组。
  • 在zsteqr中为双精度浮点型数组。

长度为n-1。

  • 进入时:三对角矩阵的次对角元素。
  • 退出时:被销毁。

输入,输出

z

  • 在ssteqr中为单精度浮点型数组。
  • 在dsteqr中为双精度浮点型数组。
  • 在csteqr中为单精度复数型数组。
  • 在zsteqr中为双精度复数型数组。

大小为ldz*n。

  • 进入时:若compz='V'时,则为正交矩阵。
  • 退出时:
    • 若info=0,且compz='V'时,则为原对称矩阵的正交特征向量。
    • 若compz='I'时,则为对称三对角矩阵的正交特征向量。
    • 若compz='N'时,不使用。

输入,输出

ldz

整数型

矩阵z的主维,ldz ≥ max(1, n)。

输入

work

  • 在ssteqr中为单精度浮点型数组。
  • 在dsteqr中为双精度浮点型数组。
  • 在csteqr中为单精度浮点型数组。
  • 在zsteqr中为双精度浮点型数组。

工作数组,大小为max(1, 2*n-2)。当compz='N'时,不使用。

输出

info

整数型

  • 等于0:表示成功。
  • 小于0:info=-i,表示第i个参数非法。
  • 大于0:算法无法在30*n次的迭代中找到所有特征值。

输出

依赖

#include "klapack.h"

示例

C Interface:

const char compz = 'N';
const int n = 4;
const int ldz = 4;

int info = 0;

double d[] = {72.1673, 66.1857, 64.7644, 28.0199, 91.4151};
double e[] = {6.8955, 7.2465, 3.5019, 8.2268, 3.5287};
int *ipiv = (int*)malloc(n * sizeof(int));
double b[] = {9.4532, 1.5204, 2.2127, 0.9891, 7.1778,
              6.8955, 7.2465, 3.5019, 8.2268, 3.5287};

double *z = (double*)malloc(ldz * n * sizeof(double));
double *work = (double*)malloc(n * sizeof(double));

dsteqr_(&compz, &n, d, e, z, &ldz, work, &info);
if (info != 0) {
    printf("ERROR, info = %d\n", info);
}
/* output */
* d
* 27.676252       56.816901       68.501999       78.142148
* e
* 0.000000        0.000000        0.000000

Fortran Interface:

CHARACTER :: compz = "N"
PARAMETER (n = 4) 
PARAMETER (ldz = 4) 
INTEGER :: info = 0 
REAL(8) :: d(n) 
REAL(8) :: e(n-1)
REAL(8) :: z(ldz, n)
REAL(8) :: work(n)
  
DATA d / 72.1673, 66.1857, 64.7644, 28.0199 / 
DATA e / 6.8955, 7.2465, 3.5019 /
EXTERNAL DSTEQR
 CALL DSTEQR(compz, n, d, e, z, ldz, work, info);
* 
* Output: 
* d:  
* 27.676252       56.816901       68.501999       78.142148
* e:
* 0.000000        0.000000        0.000000
搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词