eig 接口

public interface eig

求解方阵的特征分解对于方阵. (规范)

概述

计算方阵特征值和特征向量的子程序接口。

描述

此接口提供了计算一般方阵特征值以及可选特征向量的方法。支持的数据类型包括 realcomplex,并且不对矩阵结构做任何假设。用户可以请求返回左特征向量、右特征向量或两者。它们作为与 A 大小相同的方阵的列返回。必须由用户预先分配特征值 lambda 和特征向量矩阵的空间。

注意

解决方案基于 LAPACK 的一般特征值问题求解器 *GEEV

注意

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


子程序

private module subroutine stdlib_linalg_eig_c(a, lambda, right, left, overwrite_a, err)

矩阵 A 的特征分解,返回特征值数组 lambda,以及可选的右或左特征向量。

参数

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

输入矩阵 A[m,n]

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

特征值数组

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

RIGHT 的列包含 A 的右特征向量

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

LEFT 的列包含 A 的左特征向量

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

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

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

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

private module subroutine stdlib_linalg_eig_d(a, lambda, right, left, overwrite_a, err)

矩阵 A 的特征分解,返回特征值数组 lambda,以及可选的右或左特征向量。

参数

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

输入矩阵 A[m,n]

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

特征值数组

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

RIGHT 的列包含 A 的右特征向量

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

LEFT 的列包含 A 的左特征向量

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

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

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

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

private module subroutine stdlib_linalg_eig_s(a, lambda, right, left, overwrite_a, err)

矩阵 A 的特征分解,返回特征值数组 lambda,以及可选的右或左特征向量。

参数

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

输入矩阵 A[m,n]

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

特征值数组

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

RIGHT 的列包含 A 的右特征向量

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

LEFT 的列包含 A 的左特征向量

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

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

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

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

private module subroutine stdlib_linalg_eig_z(a, lambda, right, left, overwrite_a, err)

矩阵 A 的特征分解,返回特征值数组 lambda,以及可选的右或左特征向量。

参数

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

输入矩阵 A[m,n]

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

特征值数组

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

RIGHT 的列包含 A 的右特征向量

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

LEFT 的列包含 A 的左特征向量

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

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

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

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

private module subroutine stdlib_linalg_real_eig_d(a, lambda, right, left, overwrite_a, err)

矩阵 A 的特征分解,返回实特征值数组 lambda,以及可选的右或左特征向量。如果特征值具有非平凡的虚部,则返回错误。

参数

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

输入矩阵 A[m,n]

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

实特征值数组

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

RIGHT 的列包含 A 的右特征向量

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

LEFT 的列包含 A 的左特征向量

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

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

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

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

private module subroutine stdlib_linalg_real_eig_s(a, lambda, right, left, overwrite_a, err)

矩阵 A 的特征分解,返回实特征值数组 lambda,以及可选的右或左特征向量。如果特征值具有非平凡的虚部,则返回错误。

参数

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

输入矩阵 A[m,n]

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

实特征值数组

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

RIGHT 的列包含 A 的右特征向量

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

LEFT 的列包含 A 的左特征向量

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

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

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

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