2026a
# slvblk
求解几乎块对角线性系
函数库: TyCurveFitting
# 语法
x = slvblk(blokmat,b)
x = slvblk(blokmat,b,w)
# 说明
x = slvblk(blokmat, b) 返回线性系
右侧的 b 可能有好几列,它的行数应该与 blokmat 描述的矩阵的行数相同。示例
x = slvblk(blokmat,b,w) 返回加权和
# 示例
求解几乎块对角线性系
使用 spcol 生成一个几乎块对角矩阵。
using TyCurveFitting
using TyMath
colmat = spcol((1:6)',3,.1 .+(2:4)',"sl")
令 y 为某些点的正弦,求解该几乎块对角矩阵。
coefs = slvblk(colmat,sin.(1:3))
coefs = 3×1 Matrix{Float64}:
1.4214191948768709
0.5667319661085738
-0.1498414207018735
计算结果与真实解之间的残差模,注意此时的 colmat 为可以被 slvblk 接受的块对角阵形式,而非真正的块对角阵,因此这里需要重新生成它代表的块对角阵 colmatdig。
colmatdig = spcol((1:6)',3,.1 .+(2:4)')
norm(colmatdig*coefs-sin.(1:3))
ans = 2.498001805406602e-16
# 算法
bkbrk 用来得到由 blokmat (以一种可接受的形式)描述的系数矩阵的必要部分。
每个对角块都会在使用下一个对角块分解中未使用的方程进行扩大后进行 QR 分解。结果的分解会被回代以求解线性系。