# lscov_core
存在已知协方差的最小二乘解,该函数只输出解。
函数库: TyMath
# 语法
x = lscov_core(A,B)
x = lscov_core(A,B,w)
x = lscov_core(A,B,V)
x = lscov_core(A,B,V,alg)
# 说明
x = lscov_core(A,B) 对于线性系统
x = lscov_core(A,B,w) 返回最小化
x = lscov_core(A,B,V) 返回最小化
x = lscov_core(A,B,V,alg) 指定求解线性系统的算法。默认情况下,lscov_core 使用 C 的 Cholesky 分解来计算 x。将 alg 指定为 "orth",以使用 C 的正交分解。如果 C 不可逆,则 lscov_core 使用正交分解,而不管 alg 的值如何。
# 示例
普通最小二乘法
为线性系统 A*x = b 创建一个矩阵 A 和向量 b。使用 lscov_core 计算线性系统的最小二乘解。
using TyMath
x1 = [0.2,0.5,0.6,0.8,1.0,1.1]
x2 = [0.1,0.3,0.4,0.9,1.1,1.4]
A = [ones(size(x1)) x1 x2]
b = [0.17,0.26 ,0.28,0.23,0.27,0.34]
x = lscov_core(A,b)
x = 3-element Vector{Float64}:
0.12030264279624908
0.3283887468030691
-0.13120204603580593
加权最小二乘法
为问题 A*x = b 创建 A 矩阵和 b 向量。创建一个相对观测值权重向量,并计算加权最小二乘解。
using TyMath
x1 = [0.2,0.5,0.6,0.8,1.0,1.1]
x2 = [0.1,0.3,0.4,0.9,1.1,1.4]
A = [ones(size(x1)) x1 x2]
b = [0.17,0.26,0.28,0.23,0.27,0.34]
w = [1,1,1,1,1,0.1];
x1 = lscov_core(A,b,w)
x1 = 3-element Vector{Float64}:
0.1045635719076363
0.461425697039379
-0.2620580626616844
广义最小二乘
为问题 A*x = b 创建 A 矩阵和 b 向量。创建一个协方差缩放矩阵,并计算广义最小二乘解。
using TyMath
a1 = [0.2, 0.5, 0.6, 0.8, 1.0, 1.1];
a2 = [0.1, 0.3, 0.4, 0.9, 1.1, 1.4];
A = [ones(size(a1)) a1 a2];
b = [0.17; 0.26; 0.28; 0.23; 0.27; 0.24];
C = 0.2*ones(size(a1)) .+ 0.8*diagm(ones(size(a1)));
x = lscov_core(A,b,C)
x = 3-element Vector{Float64}:
0.10184569479965878
0.4843989769820973
-0.2846547314578009
# 输入参数
A, B — 操作数向量 | 矩阵
操作数,指定为向量或矩阵。A 和 B 必须具有相同的行数。如果 B 是矩阵,则 lscov_core 为 B 的每列返回一个解。
数据类型: Float16 | Float32 | Float64 | Int8 | Int16 | Int32 | Int64 | Int128 | Complex
复数支持: 是
w — 相对权重非负实数列向量
相对权重,指定为非负实数列向量,行数与 A 相同。权重通常是计数或逆方差。当指定此参量时,lscov_core 返回线性系统
数据类型: Float16 | Float32 | Float64 | Int8 | Int16 | Int32 | Int64 | Int128
复数支持: 否
V — 缩放协方差矩阵实数方阵
缩放协方差矩阵,指定为实对称矩阵(如果是复数矩阵,则为埃尔米特矩阵)。V 可以是正定矩阵,也可以是半定矩阵。如果 V 是正定矩阵,则 lscov_core 返回线性系统
如果 V 是半正定矩阵,则 lscov_core 返回
数据类型: Float16 | Float32 | Float64 | Int8 | Int16 | Int32 | Int64 | Int128
复数支持: 否
alg — 最小二乘求解算法"chol" (默认) | "orth"
"chol" —— 使用 C 的 Cholesky 分解,并对该因子求逆以将问题变换为普通最小二乘法;
"orth" —— 使用正交分解算法。这种算法的计算成本更高,但当 C 是病态或奇异矩阵时,该算法更适用。
默认情况下,lscov_core 函数使用 Cholesky 分解。但是,如果 lscov_core 确定 C 是半定矩阵,则该函数使用正交分解算法,而不管 alg 的值如何。
数据类型: Float16 | Float32 | Float64 | Int8 | Int16 | Int32 | Int64 | Int128
复数支持: 否
# 输出参数
x — 解向量 | 矩阵
解,以向量或矩阵形式返回。如果 A 是 m×n 矩阵,b 是 m×p 矩阵,那么 x 是 n×p 矩阵,包括 p 为 1 的情况。如果 A 是欠定矩阵,则有多个可能的 x。在这种情况下,x 的一些元素限制为零以获得唯一定义的解。
如果 A 具有满存储,则 x 也具有满存储。如果您指定了缩放协方差矩阵,当 A、b 和 C 是稀疏矩阵时,则 x 是稀疏矩阵。否则,如果 A 和 b 是稀疏矩阵,则 x 是稀疏矩阵。该函数只计算解,计算效率比lscov高很多。
# 另请参阅
inv | linsolve | lscov | lscov_basic