二次型如何贯通测量平差:从线性代数到最小二乘
2026/9/8 3:11:01 网站建设 项目流程

做测量数据处理这些年,我越来越觉得,大学线性代数课上那个看似抽象的“二次型”,其实是测量平差整座大厦的承重墙。当年学f(x) = x^T A x的时候,我也只觉得它是个考点,直到工作后拿水准网、导线网、GNSS控制网一遍遍跑平差,才意识到最小二乘、误差方程、法方程、精度评定、方差分量估计,背后站着的全是同一个二次型。

这篇文章不是教科书式的定义复述,我想从“测量平差的真实场景”出发,把二次型这条线从线性代数一路拉到平差的每一个关键环节:为什么平差准则偏偏是V^T P V = min,为什么法方程系数阵必然正定,为什么单位权方差要用残差二次型除以自由度,为什么误差椭圆的长半轴短半轴和特征值有关。适合正在学测量平差但被矩阵绕晕的学生,也适合写平差程序时想弄明白“为什么这样算才稳”的工程师。

1. 为什么说二次型搭起了线性代数与测量平差的桥

1.1 一个测量问题的第一现场

先看一个非常典型的场景。你要对一条三等水准路线做平差,手上有6段高差观测值,有3个待定点的高程需要求。观测值天然带着误差,直接按路线累加,闭合差永远对不上。这时候你做的第一件事就是列出误差方程,把每个观测值写成“未知参数的线性组合 + 残差”的形式:

V = B·δ - L

这里的V是残差向量,B是设计矩阵(每条观测对哪个未知数有贡献,就写1或-1),δ是待定参数的改正数,L是观测值减去近似值的常数项。然后你告诉计算机:找一组δ,让V^T P V最小。这句指令,本质上就是在解一个二次型的极小化问题。

很多教材会把这一步直接写出来,但很少有人追问:为什么偏偏是V^T P V,而不是V^T V,又不是|V|?这就要回到二次型的性质上。

1.2 二次型在这条链路里的位置

测量平差本质上是“多余观测带来的矛盾如何分配”的问题。你有n个观测值,但必要观测只有t个,多余观测数是n - t。多出来的观测让方程组互相矛盾,平差的工作就是给每个观测分配一个合理的残差,让总体的“惩罚代价”最小。

这个惩罚代价用一个二次型来表示,天然有优势:二次型处处可导、有唯一极小值、几何上是光滑的“碗形曲面”,而且能通过权阵给不同精度的观测区别对待。你想让高精度观测的残差小一点,低精度观测的残差大一点,就把权阵P放进二次型中间。于是:

V^T P V = (Bδ - L)^T P (Bδ - L)

这就是一个关于δ的二次型函数。后面所有的事情——求法方程、解算、精度评定——都是在跟这个二次型打交道。

2. 二次型基础:矩阵表示、正定性与几何意义

2.1 二次型到底是什么

二次型的严格定义不复杂:n个变量x1, x2, ..., xn的二次齐次多项式,每一项的次数都是2,比如x1^2 + 2x1x2 + 3x2^2。写成矩阵形式就是:

f(x) = x^T A x

其中A是一个对称矩阵,对角线元素对应平方项系数,非对角线元素是交叉项系数的一半。为什么要强行写成矩阵?因为只有写成矩阵形式,才能用特征值、正定性、合同变换这一整套线性代数工具来处理它。而平差里的数据天然都是矩阵组织起来的,BPN,一个比一个整齐,二次型的矩阵形式正好咬合上。

举个具体例子。f(x) = 3x1^2 - 2x1x2 + 3x2^2,用矩阵写就是:

x^T A x = [x1 x2] [[3, -1], [-1, 3]] [x1 x2]^T

中间的矩阵是对称的,交叉项-2x1x2被拆成两个-1,分别放在(1,2)(2,1)位置。

2.2 标准形、特征值分解与几何图像

二次型最经典的结论是:任何一个实对称矩阵都可以正交对角化。也就是说,总能找到一个正交矩阵Q,使得:

Q^T A Q = diag(λ1, λ2, ..., λn)

更通俗地说,经过一个坐标旋转,二次型的交叉项全部消失,只剩下一串平方项:

f(y) = λ1 y1^2 + λ2 y2^2 + ... + λn yn^2

这就是二次型的标准形。这组λ就是矩阵A的特征值,它们决定了二次型的几何形状。

如果限定x^T A x = 1,在二维情形下它是一条椭圆曲线(当A正定时),长短轴方向由特征向量给出,半轴长度的平方倒数就是特征值。三维及以上就是超椭球面。我把这个几何图像看得特别重,因为测量平差里的误差椭圆、误差椭球,本质上就是这个几何图景的工程化。

2.3 正定性:平差能用最小二乘的底气

如果一个实对称矩阵A对所有非零向量x都满足x^T A x > 0,这个矩阵就叫正定矩阵。正定性的经济学解释是:这个“成本函数”处处向上凸,只有一个全局最低点,不会出现鞍点或无数个极小值点。

这个性质至关重要。测量平差里解最小二乘问题,如果目标函数V^T P V不是正定二次型,就可能出现无解、多解或数值震荡。而正定矩阵的所有特征值都大于0,法方程系数阵B^T P B一旦正定,就保证了最优解存在且唯一。

实际判断正定性时,除了看特征值,还可以看各阶顺序主子式是否都大于0。但在平差问题里,通常不用这么麻烦——只要设计矩阵B列满秩、权阵P正定,那么B^T P B必然正定,这个结论本身就是二次型理论的一个直接应用。

3. 最小二乘平差的二次型本质

3.1 误差方程与加权平方和

测量平差的起点是观测方程。假设有n个观测值L,t个待定参数X,观测方程可以线性化为:

V = B·δ - L

其中Bn × t的设计矩阵。每个观测值可能精度不一样,所以引入权阵P,通常是一个正定对角阵,对角线元素反映观测的权重。权的定义是观测方差与单位权方差的比值,所以权越大表示这个观测越“可信”,平差时它的残差会被压得更小。

最小二乘准则写出来就是:

min φ(δ) = V^T P V = (Bδ - L)^T P (Bδ - L)

这个φ(δ)展开以后是什么?把括号乘开:

φ(δ) = δ^T B^T P B δ - 2δ^T B^T P L + L^T P L

第一项是未知数δ的二次型,第二项是线性项,第三项是常数项。所以平差目标函数本质就是一个“二次型 + 线性项 + 常数”的标准结构。

3.2 法方程的推导:求导与配方法

怎么求这个二次型的最小值?最直接的办法是对δ求偏导并令其等于0。矩阵求导公式在这里派上用场:对δ求导后得到:

∂φ/∂δ = 2 B^T P B δ - 2 B^T P L = 0

整理一下,就是测量平差里最经典的法方程:

B^T P B δ = B^T P L

N = B^T P BW = B^T P L,则法方程写成:

N δ = W

如果N可逆,解就是δ = N^{-1} W。这里要特别说一句:求导法令导数为0,只说明是极值点,凭什么知道是最小值而不是最大值?因为N是正定矩阵,φ(δ)是一个开口向上的二次碗形,唯一的驻点就是全局最小值点。

如果你不想用求导,配方法也能看到同样的结论。把φ(δ)配方成:

φ(δ) = (δ - N^{-1}W)^T N (δ - N^{-1}W) + 常数

由于N正定,第一项永远大于等于0,要让φ最小,只能让δ = N^{-1}W。这个角度看,二次型的正定性简直是救命的性质。

3.3 法方程的正定性:有解、唯一、数值稳定

很多人写代码时直接用numpy.linalg.solveMATLAB\解法方程,却没想过为什么这个方程组是“好解”的。答案还是正定性。

对任意非零向量y,考虑:

y^T N y = y^T B^T P B y = (B y)^T P (B y)

如果B列满秩,B y不会等于零向量;P正定,(B y)^T P (B y)必然大于0。所以N正定。正定矩阵的所有特征值都大于0,意味着方程组的解唯一,而且用Cholesky分解求解时数值上非常稳定。

实际工程里的法方程通常不会太大,几百阶上千阶都有,Cholesky分解比普通LU分解快一倍,而且不需要选主元,因为正定矩阵天生“素质好”。这算是我在写平差程序时觉得最直接的收益:只要B列满秩、P正定,后端解法器几乎不用操心数值问题。

3.4 一个完整算例:水准网平差

用一个具体算例串起来。假设已知点A的高程为100.000m,待定点B、C、D的近似高程分别取101.005m、102.017m、102.524m。观测了6段高差,数据如下表:

编号起点终点高差观测值(m)近似模型(m)
1AB1.005101.005 - 100.000 = 1.005
2BC1.012102.017 - 101.005 = 1.012
3AC2.019102.017 - 100.000 = 2.017
4CD0.507102.524 - 102.017 = 0.507
5BD1.515102.524 - 101.005 = 1.519
6AD2.524102.524 - 100.000 = 2.524

δ = [δB, δC, δD]^T为三个待定点的改正数,误差方程为V = Bδ - L。设计矩阵B是6×3矩阵:

B = [ 1, 0, 0] [-1, 1, 0] [ 0, 1, 0] [ 0, -1, 1] [-1, 0, 1] [ 0, 0, 1]

常数项L由观测值与近似模型的差值构成:

L = [0, 0, 0.002, 0, -0.004, 0]^T

设各段高差等权,P = I(单位阵)。法方程系数阵:

N = B^T B = [[3, -1, -1], [-1, 3, -1], [-1, -1, 3]]

常数项:

W = B^T L = [0.004, 0.002, -0.004]^T

解法方程组:

δ = N^{-1} W = [0.0015, 0.0010, -0.0005]^T(单位:m)

也就是说,B点最终高程是101.0065m,C点是102.0180m,D点是102.5235m。残差向量:

V = Bδ - L = [0.0015, -0.0005, -0.0010, -0.0015, 0.0020, -0.0005]^T

残差加权平方和:

V^T P V = 0.0015^2 + (-0.0005)^2 + (-0.001)^2 + (-0.0015)^2 + 0.002^2 + (-0.0005)^2 = 1.0 × 10^-5

这个数看起来很小,但它在精度评定里用处很大,下面详细说。

4. 精度评定的二次型视角:从V^T P V到误差椭圆

4.1 单位权方差估计与卡方分布

平差完了不能只给一组参数,必须告诉用户“这组参数精度怎么样”。最基础的一个指标是单位权方差:

σ0^2 = V^T P V / (n - t)

分母n - t叫自由度,就是多余观测数。为什么除以自由度而不是观测总数n?因为t个参数已经从观测里“消耗”掉了t个自由度,剩下的n - t才是真正用来估计随机误差的自由度。数学上有严格的推导:在正态观测假设下,V^T P V / σ^2服从自由度为n - t的卡方分布,所以V^T P V / (n - t)σ^2的无偏估计。

这就是二次型分布理论在平差里的典型应用。正态分布向量的二次型会得到卡方分布,平差残差的二次型V^T P V正好是这样一个量。你可以不用记住复杂的测度论推导,但应该记住这个结论:残差二次型除以自由度得到的单位权方差,告诉你“单位权观测精度大概是多大”,是后续一切精度评定的基础。

回到刚才的算例:n = 6t = 3,自由度r = 3σ0^2 = 1.0×10^-5 / 3 ≈ 3.33×10^-6,单位权中误差σ0 ≈ 0.0018m ≈ 1.8mm。这个数值对应“每公里水准测量的偶然中误差”一类指标,可以和规范限差比对。

4.2 误差椭圆:协因数阵的二次型几何

参数的精度信息都藏在协因数阵里。平差后参数的协因数阵就是法方程系数阵的逆:

Qxx = N^{-1} = (B^T P B)^{-1}

协因数阵乘以单位权方差,才是方差-协方差矩阵:

Dxx = σ0^2 · Qxx

误差椭圆这个东西,本质上是对点位协方差矩阵做二次型几何解释。以二维平面控制点为例,点位协方差矩阵是:

Dp = [[σx^2, σxy], [σxy, σy^2]]

这个对称矩阵的特征值λ1, λ2和特征向量决定了误差椭圆的长半轴、短半轴和方向:

  • 长半轴a = σ0 · sqrt(λ1)
  • 短半轴b = σ0 · sqrt(λ2)
  • 特征向量方向就是椭圆主轴方向

为什么?因为标准化误差椭圆方程可以写成:

(Δp)^T Dp^{-1} (Δp) = 1

这又是一个二次型。二次型x^T A x = 1的图形是椭圆,椭圆的方向和轴长由A的特征值和特征向量决定。测量学里画误差椭圆,就是先求主成分——这正是二次型理论最漂亮的工程化表现之一。

控制网的布设方案不同,B矩阵不同,N矩阵不同,协因数阵的特征值就不同。网形强的地方特征值小,误差椭圆就小;网形弱的地方特征值大,误差椭圆就大。设计控制网时先模拟计算误差椭圆,能直观看到哪些点位精度弱、哪个方向弱,根本不用等到实测完才发现问题。

4.3 假设检验:二次型分布的经典应用

平差后要回答“这个平差结果合理吗”,常用统计检验。最典型的是全局检验:

H0: σ0^2 = 先验单位权方差

检验统计量是V^T P V / σ0^2,它服从自由度为n - t的卡方分布。如果计算出来的值落在分布的拒绝域里,说明观测值的先验精度可能没定准,或者数据里有粗差。

单点粗差探测就更细了,常用数据探测法(Data Snooping)。对第i个观测值,可以构造标准化的残差量,本质上是从残差向量里取一个分量再除以它的标准差。这个标准差的来源还是协因数阵——残差向量的协因数阵是:

Qvv = P^{-1} - B N^{-1} B^T

你看,这里面又是N^{-1},又是B^T,全都是二次型世界的熟人。粗差探测的每个检验量,本质上都在跟二次型打交道。

5. 现代平差中的高级二次型玩法

5.1 方差分量估计:多个二次型联立

现实中观测值往往不止一类。比如一个平面控制网里既有方向观测,又有边长观测,还有GNSS基线向量。不同类观测的精度差异可能很大,权阵P该怎么定?如果一开始精度估计不准,最小二乘解就是有偏的。

赫尔默特方差分量估计的基本思路是:把观测按类型分组,每组算一个残差二次型V_i^T P_i V_i,然后根据“二次型的期望等于协因数阵的迹乘以对应方差分量”这一关系,把各类观测的方差分量反解出来。公式长这样:

E(V_i^T P_i V_i) = tr(P_i Qvv_i) · σ_i^2

把所有组写在一起,得到一个线性方程组,解出各组的σ_i^2,再更新权阵,重新平差,迭代到收敛。这里每个V_i^T P_i V_i都是一个二次型,方差分量估计的本质就是“用多个二次型的观测方程组反解方差分量”。二次型不再是理论摆设,而是现代测量数据处理引擎里的核心算力单元。

5.2 秩亏自由网与最小范数约束

经典平差要求设计矩阵B列满秩,但有些场景做不到。比如没有足够已知点的自由网、GPS网平差时不固定任何点的“秩亏网”,这时候N = B^T P B是奇异的,法方程有无穷多组解。怎么办?需要附加基准约束。

秩亏自由网平差常用最小范数约束:

min δ^T δ,附加上S^T δ = 0

也就是在所有满足误差方程的解里,选一组“改正数平方和最小”的解。这又是一个二次型极小化问题。你看,秩亏网的解算,相当于在一个约束条件构成的平面上找二次型δ^T δ的最小值,几何上就是投影问题。

实际求解时通常不直接求N^{-1}(因为奇异),而是用广义逆或者附加约束方程再组成扩展法方程。理解背后的二次型视角,能帮你判断为什么秩亏网解出来的点位绝对位置不可靠、但相对位置可靠——因为最小范数约束本身没有提供外部基准信息。

5.3 抗差估计与正则化:给二次型加惩罚项

经典最小二乘对粗差非常敏感,一个很大的粗差能把结果拉得面目全非。抗差估计的思路是换掉二次型代价函数,比如用Huber函数:

ρ(v) = v^2/2,当 |v| ≤ c;ρ(v) = c|v| - c^2/2,当 |v| > c

但实际工程里,抗差估计常借助等价权原理,迭代地修改权阵,每次都还是解一个V^T P̄ V的二次型极小化问题,只是权阵根据残差大小在变。换句话说,抗差估计仍然跑在二次型的轨道上,只是把二次型的“权重”调整得更聪明。

另一种情况是法方程病态,比如测站坐标几乎共线导致N接近奇异。这时常用岭估计(Ridge Estimation),在目标二次型里加一个惩罚项:

min V^T P V + k · δ^T δ

这里的k称为岭参数。加上去之后,目标函数变成(V^T P V + k δ^T δ),对应的法方程系数阵变成N + kI,由于kI是正定对角阵,整个矩阵恢复正定,解变得稳定。这个操作在数学上就是“给病态二次型加一个正定二次型”,在工程上叫正则化。图像处理里的Tikhonov正则化、机器学习里的L2正则化,跟这里完全一个道理。二次型不仅连接了平差和线性代数,还连接了统计、优化和机器学习。

6. 实操经验:程序实现、常见问题与避坑清单

6.1 从二次型出发写一套通用平差引擎

我写过几版平差程序,最大的体会是:只要从二次型的角度组织代码,可以写出一套同时处理水准网、导线网、GNSS网的通用引擎。不管什么观测量,代码逻辑都是一样的:

  1. 构建设计矩阵B
  2. 构建观测值常数项L
  3. 构建权阵P
  4. 计算法方程N = B^T P BW = B^T P L
  5. 解算δ = N^{-1} W
  6. 计算残差V = Bδ - L
  7. 计算V^T P V、单位权方差、协因数阵Qxx = N^{-1}
  8. 按需要的格式输出参数、残差、精度指标、误差椭圆参数

Python里核心代码不到二十行:

import numpy as np # B: 设计矩阵 (n x t), P: 权阵 (n x n), L: 常数项 (n,) N = B.T @ P @ B W = B.T @ P @ L delta = np.linalg.solve(N, W) # 法方程求解 V = B @ delta - L # 残差 VTPV = float(V @ P @ V) # 残差二次型 sigma0_2 = VTPV / (n - t) # 单位权方差 Qxx = np.linalg.inv(N) # 参数协因数阵

不同测量任务的差异全在“怎么构建B、P、L”这一步。水准网就是起终点关联行,导线网就是坐标改正数与方向、边长观测的微分关系,GNSS基线就是三维坐标差。后端解法器和精度评定的代码可以完全复用。这个抽象一旦建立,写新项目的效率会高很多。

6.2 常见问题速查表

问题现象可能原因排查思路
法方程接近奇异,解算出天文数字设计矩阵列不满秩,网形有秩亏检查是否有足够的已知点或基准条件,考虑加约束、加正则项
平差结果偏差大,残差一边倒常数项L计算有误,或误差方程符号约定搞反用手算的小例子(比如两个点一条高差)验证B、L的符号
V^T P V异常偏大观测值里含粗差,或权阵P定得离谱先做卡方全局检验,再做数据探测法定位粗差;检查权阵单位是否统一
V^T P V异常接近0自由度接近0,或权阵被设成无穷大检查nt,确保n - t > 0;权阵应为相对权,不是越大越好
误差椭圆长半轴超出预期对应方向观测冗余不足,网形不好提前模拟设计矩阵,检查特征值;增加交会方向或边长观测

6.3 我在工程中踩过的三个坑

第一个坑是权阵单位不统一。不同厂商的GNSS后处理软件给出的基线精度表达方式不一样,有的给标准差有的给方差,有的给的是相对精度,直接拿来构成P矩阵,法方程都能解,但单位权方差的估计值会完全失真,统计检验也直接失效。处理方法是先统一成方差,再按基准方差归一化得到相对权,最后才填入P

第二个坑是误差方程的符号约定。有些教材写V = Bδ - L,有些写V = Bδ + L,如果照着两本不同教材的公式混着写代码,法方程右端项B^T P L的符号就会错,结果差得很隐蔽。我后来养成的习惯是:在程序里先放一个两段高差的小算例,手算验证B、L的正负号,跑通再上大网。

第三个坑是坐标近似值没做好。大范围控制网里待定点近似坐标误差大时,观测方程线性化的常数项会非常大,法方程右端项数值差异悬殊,虽然最终也能解,但精度损失和迭代次数都会增加。后来我养成的习惯是先做一次重心化处理,再把坐标单位统一成米或者毫米,尽量减少常数项的量级差异。这个细节在写大规模平差程序时非常重要。

还有一个心得想多说一句:平差程序里的数值稳定性,其实比很多人想象的更依赖二次型理论。法方程系数阵条件数cond(N) = λmax / λmin,两个特征值差几个数量级,病态就很明显。我在设计控制网时,会先模拟计算N的特征值谱,如果λmax / λmin超过10的6次方,就调整网形或增加观测,而不是等到解算炸了才补救。这个习惯帮我省了不少返工的时间。

二次型这堂课,当年在课堂上觉得抽象,现在回头看,它其实是连接线性代数与测量平差最流畅的一座桥。掌握它的核心——矩阵表示、正定性、特征值几何意义——再看平差里那些公式,就像多了一副透视眼镜,每个步骤都有了着落。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询