svd 接口

公共接口 svd

计算realcomplex二维矩阵的奇异值分解。(规范

摘要

计算realcomplex二维矩阵的奇异值分解的接口。

描述

此接口提供计算矩阵奇异值分解的方法。支持的数据类型包括realcomplex。子程序返回一个包含奇异值的real数组,以及可选的左奇异向量矩阵U和右奇异向量矩阵V。对于大小为[m,n]的矩阵AUV的完整矩阵存储应分别为[m,m]和[n,n]。可以选择使用部分存储[m,k]和[k,n],k=min(m,n),并设置full_matrices=.false.

注意

该解决方案基于 LAPACK 的奇异值分解*GESDD方法。

示例

    real(sp) :: a(2,3), s(2), u(2,2), vt(3,3) 
    a = reshape([3,2, 2,3, 2,-2],[2,3])

    call svd(A,s,u,v)
    print *, 'singular values = ',s

子程序

私有模块子程序 stdlib_linalg_svd_c(a, s, u, vt, overwrite_a, full_matrices, err)

摘要

计算矩阵的奇异值分解

描述

此函数计算realcomplex矩阵的奇异值分解并返回奇异值数组,以及可选的左矩阵包含左酉奇异向量,以及右矩阵包含右酉奇异向量。

参数:a 输入大小为[m,n]的矩阵。参数:s 输出大小为[min(m,n)]的real数组,返回奇异值的列表。参数:u [可选] 输出大小为[m,m]或[m,min(m,n)](.not.full_matrices)的左奇异矩阵。包含奇异向量作为列。参数:vt [可选] 输出大小为[n,n]或[min(m,n),n](.not.full_matrices)的右奇异矩阵。包含奇异向量作为行。
参数:overwrite_a [可选] 指示是否可以覆盖输入矩阵的标志。参数:full_matrices [可选] 如果为.true.(默认),则矩阵的大小分别为[m,m]、[n,n]。否则,它们的大小分别为[m,k]和[k,n],其中k=min(m,n)。参数:err [可选] 状态返回值。

参数

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

输入矩阵 A[m,n]

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

奇异值数组

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

U 的列包含左奇异向量

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

V^T 的行包含右奇异向量

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

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

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

[可选] 完整矩阵的形状(u)==[m,m],形状(vh)==[n,n](默认);否则,它们的形状(u)==[m,k]和形状(vh)==[k,n],其中k=min(m,n)

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

[可选] 状态返回值。如果未请求,则代码在出错时将停止

私有模块子程序 stdlib_linalg_svd_d(a, s, u, vt, overwrite_a, full_matrices, err)

摘要

计算矩阵的奇异值分解

描述

此函数计算realcomplex矩阵的奇异值分解并返回奇异值数组,以及可选的左矩阵包含左酉奇异向量,以及右矩阵包含右酉奇异向量。

参数:a 输入大小为[m,n]的矩阵。参数:s 输出大小为[min(m,n)]的real数组,返回奇异值的列表。参数:u [可选] 输出大小为[m,m]或[m,min(m,n)](.not.full_matrices)的左奇异矩阵。包含奇异向量作为列。参数:vt [可选] 输出大小为[n,n]或[min(m,n),n](.not.full_matrices)的右奇异矩阵。包含奇异向量作为行。
参数:overwrite_a [可选] 指示是否可以覆盖输入矩阵的标志。参数:full_matrices [可选] 如果为.true.(默认),则矩阵的大小分别为[m,m]、[n,n]。否则,它们的大小分别为[m,k]和[k,n],其中k=min(m,n)。参数:err [可选] 状态返回值。

参数

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

输入矩阵 A[m,n]

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

奇异值数组

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

U 的列包含左奇异向量

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

V^T 的行包含右奇异向量

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

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

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

[可选] 完整矩阵的形状(u)==[m,m],形状(vh)==[n,n](默认);否则,它们的形状(u)==[m,k]和形状(vh)==[k,n],其中k=min(m,n)

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

[可选] 状态返回值。如果未请求,则代码在出错时将停止

私有模块子程序 stdlib_linalg_svd_s(a, s, u, vt, overwrite_a, full_matrices, err)

摘要

计算矩阵的奇异值分解

描述

此函数计算realcomplex矩阵的奇异值分解并返回奇异值数组,以及可选的左矩阵包含左酉奇异向量,以及右矩阵包含右酉奇异向量。

参数:a 输入大小为[m,n]的矩阵。参数:s 输出大小为[min(m,n)]的real数组,返回奇异值的列表。参数:u [可选] 输出大小为[m,m]或[m,min(m,n)](.not.full_matrices)的左奇异矩阵。包含奇异向量作为列。参数:vt [可选] 输出大小为[n,n]或[min(m,n),n](.not.full_matrices)的右奇异矩阵。包含奇异向量作为行。
参数:overwrite_a [可选] 指示是否可以覆盖输入矩阵的标志。参数:full_matrices [可选] 如果为.true.(默认),则矩阵的大小分别为[m,m]、[n,n]。否则,它们的大小分别为[m,k]和[k,n],其中k=min(m,n)。参数:err [可选] 状态返回值。

参数

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

输入矩阵 A[m,n]

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

奇异值数组

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

U 的列包含左奇异向量

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

V^T 的行包含右奇异向量

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

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

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

[可选] 完整矩阵的形状(u)==[m,m],形状(vh)==[n,n](默认);否则,它们的形状(u)==[m,k]和形状(vh)==[k,n],其中k=min(m,n)

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

[可选] 状态返回值。如果未请求,则代码在出错时将停止

私有模块子程序 stdlib_linalg_svd_z(a, s, u, vt, overwrite_a, full_matrices, err)

摘要

计算矩阵的奇异值分解

描述

此函数计算realcomplex矩阵的奇异值分解并返回奇异值数组,以及可选的左矩阵包含左酉奇异向量,以及右矩阵包含右酉奇异向量。

参数:a 输入大小为[m,n]的矩阵。参数:s 输出大小为[min(m,n)]的real数组,返回奇异值的列表。参数:u [可选] 输出大小为[m,m]或[m,min(m,n)](.not.full_matrices)的左奇异矩阵。包含奇异向量作为列。参数:vt [可选] 输出大小为[n,n]或[min(m,n),n](.not.full_matrices)的右奇异矩阵。包含奇异向量作为行。
参数:overwrite_a [可选] 指示是否可以覆盖输入矩阵的标志。参数:full_matrices [可选] 如果为.true.(默认),则矩阵的大小分别为[m,m]、[n,n]。否则,它们的大小分别为[m,k]和[k,n],其中k=min(m,n)。参数:err [可选] 状态返回值。

参数

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

输入矩阵 A[m,n]

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

奇异值数组

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

U 的列包含左奇异向量

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

V^T 的行包含右奇异向量

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

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

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

[可选] 完整矩阵的形状(u)==[m,m],形状(vh)==[n,n](默认);否则,它们的形状(u)==[m,k]和形状(vh)==[k,n],其中k=min(m,n)

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

[可选] 状态返回值。如果未请求,则代码在出错时将停止