eigh 接口

公共接口 eigh

求解特征分解对于实对称或复厄米特方阵。 (规范)

摘要

计算实对称或复厄米特方阵的特征值和特征向量的子程序接口。

描述

此接口提供计算实对称或复厄米特方阵的特征值,以及可选的特征向量的方法。支持的数据类型包括 realcomplex。矩阵必须是对称的(如果为 real)或厄米特的(如果为 complex)。仅访问矩阵的下半部分或上半部分,用户可以使用可选的 upper_a 标志选择使用哪一部分(默认值:使用下半部分)。向量是正交的,并且可以作为具有与 A 相同类型和大小的可选矩阵 vectors 的列返回。必须由用户提供特征值 lambda 和特征向量矩阵的预分配空间。

注意

解决方案基于 LAPACK 的特征问题求解器 *SYEV/*HEEV

注意

BLAS/LAPACK 后端目前不支持扩展精度 (xdp)。


子程序

私有模块子程序 stdlib_linalg_eigh_c(a, lambda, vectors, upper_a, overwrite_a, err)

实对称或复厄米特矩阵 A 的特征分解,返回一个包含特征值的数组 lambda,以及可选的右或左特征向量。

参数

类型 意图可选 属性 名称
complex(kind=sp), intent(inout), target :: a(:,:)

输入矩阵 A[m,n]

real(kind=sp), intent(out) :: lambda(:)

特征值数组

complex(kind=sp), intent(out), optional, target :: vectors(:,:)

vectors 的列包含 A 的正交特征向量

logical(kind=lk), intent(in), optional :: upper_a

[可选] 是否应使用 A 的上/下半部分?默认值:下半部分

logical(kind=lk), intent(in), optional :: overwrite_a

[可选] 可以覆盖和销毁 A 数据吗?

type(linalg_state_type), intent(out), optional :: err

[可选] 状态返回标志。如果未请求错误,代码将停止

私有模块子程序 stdlib_linalg_eigh_d(a, lambda, vectors, upper_a, overwrite_a, err)

实对称或复厄米特矩阵 A 的特征分解,返回一个包含特征值的数组 lambda,以及可选的右或左特征向量。

参数

类型 意图可选 属性 名称
real(kind=dp), intent(inout), target :: a(:,:)

输入矩阵 A[m,n]

real(kind=dp), intent(out) :: lambda(:)

特征值数组

real(kind=dp), intent(out), optional, target :: vectors(:,:)

vectors 的列包含 A 的正交特征向量

logical(kind=lk), intent(in), optional :: upper_a

[可选] 是否应使用 A 的上/下半部分?默认值:下半部分

logical(kind=lk), intent(in), optional :: overwrite_a

[可选] 可以覆盖和销毁 A 数据吗?

type(linalg_state_type), intent(out), optional :: err

[可选] 状态返回标志。如果未请求错误,代码将停止

私有模块子程序 stdlib_linalg_eigh_s(a, lambda, vectors, upper_a, overwrite_a, err)

实对称或复厄米特矩阵 A 的特征分解,返回一个包含特征值的数组 lambda,以及可选的右或左特征向量。

参数

类型 意图可选 属性 名称
real(kind=sp), intent(inout), target :: a(:,:)

输入矩阵 A[m,n]

real(kind=sp), intent(out) :: lambda(:)

特征值数组

real(kind=sp), intent(out), optional, target :: vectors(:,:)

vectors 的列包含 A 的正交特征向量

logical(kind=lk), intent(in), optional :: upper_a

[可选] 是否应使用 A 的上/下半部分?默认值:下半部分

logical(kind=lk), intent(in), optional :: overwrite_a

[可选] 可以覆盖和销毁 A 数据吗?

type(linalg_state_type), intent(out), optional :: err

[可选] 状态返回标志。如果未请求错误,代码将停止

私有模块子程序 stdlib_linalg_eigh_z(a, lambda, vectors, upper_a, overwrite_a, err)

实对称或复厄米特矩阵 A 的特征分解,返回一个包含特征值的数组 lambda,以及可选的右或左特征向量。

参数

类型 意图可选 属性 名称
complex(kind=dp), intent(inout), target :: a(:,:)

输入矩阵 A[m,n]

real(kind=dp), intent(out) :: lambda(:)

特征值数组

complex(kind=dp), intent(out), optional, target :: vectors(:,:)

vectors 的列包含 A 的正交特征向量

logical(kind=lk), intent(in), optional :: upper_a

[可选] 是否应使用 A 的上/下半部分?默认值:下半部分

logical(kind=lk), intent(in), optional :: overwrite_a

[可选] 可以覆盖和销毁 A 数据吗?

type(linalg_state_type), intent(out), optional :: err

[可选] 状态返回标志。如果未请求错误,代码将停止