2026a

# 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) 返回最小化误差平方和 的最小二乘解,其中 ,A 是矩阵,而 b 是列向量。如果 b 是矩阵,则 x 和 b 的对应列分别满足方程。示例


x = lscov_core(A,B,w) 返回最小化 的加权最小二乘解,其中 示例


x = lscov_core(A,B,V) 返回最小化 的广义最小二乘解,其中 且 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 成比例。

如果 V 是半正定矩阵,则 lscov_core 返回 的解,其中 和 e 是此系统有解的所有向量 e 中具有最小范数的向量。仅当 b 在 [A T] 的列空间中时,此系统才有解。

数据类型: 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