You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

带边界约束的线性最小二乘问题中求解最大缩放因子c的方案咨询

带边界约束的线性最小二乘问题中求解最大缩放因子c的方案咨询

我有如下方程组:

$$
\small
\begin{aligned}
(1 - p_0)u_0 + (q_0 - 1)v_0 + u_1 - v_1 = r_0 - c t_0 \\
(1 - p_1)u_1 + (q_1 - 1)v_1 + u_0 - v_0 = r_1 - c t_1 \\
(1 - p_2)u_2 + (q_2 - 1)v_2 + u_3 - v_3 + u_4 - v_4 = r_2 - c t_2 \\
(1 - p_3)u_3 + (q_3 - 1)v_3 + u_2 - v_2 + u_4 - v_4 = r_3 - c t_3 \\
(1 - p_4)u_4 + (q_4 - 1)v_4 + u_2 - v_2 + u_3 - v_3 = r_4 - c t_4
\end{aligned}
$$

写成矩阵形式后,系数矩阵可以拆分为两个相邻的块对角矩阵:

$$
\scriptsize
\begin{bmatrix}
1 - p_0 & 1 & 0 & 0 & 0 & q_0 - 1 & -1 & 0 & 0 & 0 \\
1 & 1 - p_1 & 0 & 0 & 0 & -1 & q_1 - 1 & 0 & 0 & 0 \\
0 & 0 & 1 - p_2 & 1 & 1 & 0 & 0 & q_2 - 1 & -1 & -1 \\
0 & 0 & 1 & 1 - p_3 & 1 & 0 & 0 & -1 & q_3 - 1 & -1 \\
0 & 0 & 1 & 1 & 1 - p_4 & 0 & 0 & -1 & -1 & q_4 - 1
\end{bmatrix}
\begin{bmatrix}
u_0 \\
u_1 \\
u_2 \\
u_3 \\
u_4 \\
v_0 \\
v_1 \\
v_2 \\
v_3 \\
v_4
\end{bmatrix}
=\begin{bmatrix}
r_0 - c t_0 \\
r_1 - c t_1 \\
r_2 - c t_2 \\
r_3 - c t_3 \\
r_4 - c t_4
\end{bmatrix}
$$

当然,这个方程组可以解出所有的$u_i$和$v_i$。

我的问题核心是数学求解部分,但为了完整说明背景:我正在使用Python函数scipy.optimize.lsq_linear,它支持边界约束——每个$u_i$和$v_i$都有下界0和一个正的上界。另外我也知道,利用系数矩阵的块对角结构,可以把问题拆分成更小的子问题,这在我实际的80个方程的场景下会非常高效。不过我现在把问题保留成整体形式,是因为我想把缩放因子$c$也作为一个未知量,和其他变量一起求解。

为此,我把问题做了一点变形:

$$
\scriptsize
\begin{bmatrix}
1 - p_0 & 1 & 0 & 0 & 0 & q_0 - 1 & -1 & 0 & 0 & 0 & t_0 \\
1 & 1 - p_1 & 0 & 0 & 0 & -1 & q_1 - 1 & 0 & 0 & 0 & t_1 \\
0 & 0 & 1 - p_2 & 1 & 1 & 0 & 0 & q_2 - 1 & -1 & -1 & t_2 \\
0 & 0 & 1 & 1 - p_3 & 1 & 0 & 0 & -1 & q_3 - 1 & -1 & t_3 \\
0 & 0 & 1 & 1 & 1 - p_4 & 0 & 0 & -1 & -1 & q_4 - 1 & t_4
\end{bmatrix}
\begin{bmatrix}
u_0 \\
u_1 \\
u_2 \\
u_3 \\
u_4 \\
v_0 \\
v_1 \\
v_2 \\
v_3 \\
v_4 \\
c
\end{bmatrix}
=\begin{bmatrix}
r_0 \\
r_1 \\
r_2 \\
r_3 \\
r_4
\end{bmatrix}
$$

在我的实际问题中,第一次迭代时所有$r_i$都是0,这时候最小二乘解会直接返回$c=0$的平凡解——所有$t_i$都不起作用,$r_i$也一直保持0。但我真正想要的是:在找到满足约束的最小二乘解的前提下,尽可能让$c$取到最大的值(不超过它的正上界$k$)。

我考虑过在矩阵里加一行,让$c$直接以$k$为目标值,但不确定这是不是个好办法。因为$k$可能比其他变量的量级大很多,这样这一行会主导最小二乘的计算,而且我也不知道该怎么合理缩放这一行来平衡权重。比如这样:

$$
\scriptsize
\begin{bmatrix}
1 - p_0 & 1 & 0 & 0 & 0 & q_0 - 1 & -1 & 0 & 0 & 0 & t_0 \\
1 & 1 - p_1 & 0 & 0 & 0 & -1 & q_1 - 1 & 0 & 0 & 0 & t_1 \\
0 & 0 & 1 - p_2 & 1 & 1 & 0 & 0 & q_2 - 1 & -1 & -1 & t_2 \\
0 & 0 & 1 & 1 - p_3 & 1 & 0 & 0 & -1 & q_3 - 1 & -1 & t_3 \\
0 & 0 & 1 & 1 & 1 - p_4 & 0 & 0 & -1 & -1 & q_4 - 1 & t_4 \\
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}
u_0 \\
u_1 \\
u_2 \\
u_3 \\
u_4 \\
v_0 \\
v_1 \\
v_2 \\
v_3 \\
v_4 \\
c
\end{bmatrix}
=\begin{bmatrix}
r_0 \\
r_1 \\
r_2 \\
r_3 \\
r_4 \\
k
\end{bmatrix}
$$

想请教一下,有没有更好的方式来构建这个问题?或者这是不是一个有标准解法的经典问题?

备注:内容来源于stack exchange,提问作者Isco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 12:23:07