胥望雅 发表于 2025-10-8 11:08:23

最小二乘问题详解3:线性最小二乘实例

1. 引言

在上一篇文章《最小二乘问题详解2:线性最小二乘求解》中笔者详细介绍了如何求解线性最小二乘问题,一般使用QR分解或者SVD分解法,这里笔者就实现一个具体的案例来验证一下。
2. 案例

总是举拟合直线的例子实在太简单了,这里就使用一个更加复杂一点问题模型:双线性变换。具体来说,假设存在两幅地图需要配置,并且找到了各自地图上的同名点,可以使用双线性变换模型来进行快速、初步的校正。也就是说一组同名点满足如下关系:

\[\begin{cases}x_1 = a_0 x_0 + b_0 y_0 + c_0 x_0 y_0 + d_0 \\y_1 = a_1 x_0 + b_1 y_0 + c_1 x_0 y_0 + d_1\end{cases}\]
其中,\((x_0,y_0)\)和\((x_1,y_1)\)是对应的同名点,也就是观测值。而\(a_0,b_0,c_0,d_0\)和\(a_1,b_1,c_1,d_1\)则是X和Y方向上的双线性变换系数,也就是待定值。对于观测值来说,这个函数是非线性的,但是对于待定值来说这个问题模型则是线性的。这也是笔者在《最小二乘问题详解1:线性最小二乘》中强调的一点:最小二乘问题是线性还是非线性,需要通过待定值来判断。
要实现这个案例,那么就需要准备一组同名点,\((x_0,y_0)\)可以通过随机数生成,\((x_1,y_1)\)则可以通过双线性变换公式加上一点噪声值来得到。另外,也不需要从头实现矩阵运算的,一定规模的矩阵运算库就可以实现线性方程组的求解,比如这里笔者使用的Eigen。具体的案例代码实现如下:
#include #include #include using namespace std;using namespace Eigen;int main() {// ========================// 1. 设置真实参数(我们想要求解的目标)// ========================Vector4d params_x_true, params_y_true;params_x_true

骆贵 发表于 2025-10-23 18:43:44

yyds。多谢分享

乐敬 发表于 2025-10-25 00:46:54

前排留名,哈哈哈

僻嘶 发表于 2025-11-7 02:52:40

感谢分享,下载保存了,貌似很强大

材部 发表于 2025-12-7 03:07:43

新版吗?好像是停更了吧。

昆拗干 发表于 2025-12-13 09:50:28

感谢分享,学习下。

莅耸 发表于 2025-12-13 11:24:07

用心讨论,共获提升!

钨哄魁 发表于 2025-12-25 10:09:38

新版吗?好像是停更了吧。

挚魉 发表于 2026-1-3 13:53:16

yyds。多谢分享

廖彗云 发表于 2026-1-15 01:42:22

感谢分享,学习下。

泡市 发表于 2026-1-15 08:46:42

谢谢分享,试用一下

轨项尺 发表于 2026-1-17 14:45:42

分享、互助 让互联网精神温暖你我

娥搽裙 发表于 2026-1-18 00:16:12

感谢分享

蓬庄静 发表于 2026-1-19 02:42:19

鼓励转贴优秀软件安全工具和文档!

彭水晶 发表于 2026-2-1 04:07:26

用心讨论,共获提升!

东门清心 发表于 2026-2-2 04:11:14

新版吗?好像是停更了吧。

凌彦慧 发表于 2026-2-3 08:40:15

懂技术并乐意极积无私分享的人越来越少。珍惜

袂沐 发表于 2026-2-7 06:59:35

分享、互助 让互联网精神温暖你我

归悦可 发表于 2026-2-8 18:37:56

很好很强大我过来先占个楼 待编辑

柯惠心 发表于 2026-2-8 22:37:01

谢谢分享,辛苦了
页: [1] 2
查看完整版本: 最小二乘问题详解3:线性最小二乘实例