计算real
或complex
二维矩阵的奇异值分解。(规范)
计算real
或complex
二维矩阵的奇异值分解的接口。
此接口提供计算矩阵奇异值分解的方法。支持的数据类型包括real
和complex
。子程序返回一个包含奇异值的real
数组,以及可选的左奇异向量矩阵U
和右奇异向量矩阵V
。对于大小为[m,n]的矩阵A
,U
和V
的完整矩阵存储应分别为[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
计算矩阵的奇异值分解
此函数计算real
或complex
矩阵的奇异值分解并返回奇异值数组,以及可选的左矩阵包含左酉奇异向量,以及右矩阵包含右酉奇异向量。
参数: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 |
[可选] 状态返回值。如果未请求,则代码在出错时将停止 |
计算矩阵的奇异值分解
此函数计算real
或complex
矩阵的奇异值分解并返回奇异值数组,以及可选的左矩阵包含左酉奇异向量,以及右矩阵包含右酉奇异向量。
参数: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 |
[可选] 状态返回值。如果未请求,则代码在出错时将停止 |
计算矩阵的奇异值分解
此函数计算real
或complex
矩阵的奇异值分解并返回奇异值数组,以及可选的左矩阵包含左酉奇异向量,以及右矩阵包含右酉奇异向量。
参数: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 |
[可选] 状态返回值。如果未请求,则代码在出错时将停止 |
计算矩阵的奇异值分解
此函数计算real
或complex
矩阵的奇异值分解并返回奇异值数组,以及可选的左矩阵包含左酉奇异向量,以及右矩阵包含右酉奇异向量。
参数: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 |
[可选] 状态返回值。如果未请求,则代码在出错时将停止 |