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

求解含左右未知量的线性方程组$Lx=Ry$的非列重组方法

解决方案:不打乱L/R列结构重组方程组

要解决这个问题,核心是在保留L和R列顺序的前提下,通过提取子矩阵而非重排列的方式,把未知量集中到左侧、已知量移到右侧。结合题目中“每个未知x对应已知y,反之亦然”的条件,我们可以按以下步骤操作:

1. 先明确索引划分

首先定义两个索引集合:

  • $\mathcal{U}$:向量x中未知量的位置索引,同时这也是y中已知量的位置索引(因为题目说未知x对应已知y)
  • $\mathcal{K}$:向量x中已知量的位置索引,同时这也是y中未知量的位置索引(反之亦然)

举个直观的例子:如果x的第1、3个元素是未知,第2个是已知,那么y的第1、3个元素是已知,第2个是未知——$\mathcal{U} = {1,3}$,$\mathcal{K} = {2}$。

2. 提取原矩阵的子矩阵(不改变列顺序)

基于上面的索引,从L和R中提取对应列的子矩阵(完全保留原列的顺序,只是选取需要的列):

  • $L_U$:L中所有列索引属于$\mathcal{U}$的子矩阵(对应x的未知部分)
  • $L_K$:L中所有列索引属于$\mathcal{K}$的子矩阵(对应x的已知部分)
  • $R_U$:R中所有列索引属于$\mathcal{U}$的子矩阵(对应y的已知部分)
  • $R_K$:R中所有列索引属于$\mathcal{K}$的子矩阵(对应y的未知部分)

3. 重组为标准线性方程组

把原方程 $Lx = Ry$ 展开并移项,将未知量全部移到左侧,已知量移到右侧:
原方程展开后是:
$$L_U x_U + L_K x_K = R_U y_U + R_K y_K$$
移项整理成标准形式:
$$\begin{bmatrix} L_U & -R_K \end{bmatrix} \begin{bmatrix} x_U \ y_K \end{bmatrix} = R_U y_U - L_K x_K$$

这里的关键是:

  • 左侧的系数矩阵 $\begin{bmatrix} L_U & -R_K \end{bmatrix}$ 完全由L和R的原列组成,没有任何列的重排,完美保留了L和R的列结构
  • 右侧是纯已知量的线性组合,计算后就是常数项向量
  • 未知向量 $\begin{bmatrix} x_U \ y_K \end{bmatrix}$ 包含了所有待求的未知量

4. 求解并还原结果

因为题目说明原方程组有唯一解,所以重组后的系数矩阵 $\begin{bmatrix} L_U & -R_K \end{bmatrix}$ 是可逆的,你可以用常规的线性方程组求解方法(比如LU分解、QR分解,或者直接求逆)解出未知向量 $z = \begin{bmatrix} x_U \ y_K \end{bmatrix}$,最后把解出的$x_U$和$y_K$放回原x和y的对应位置即可。

编程实现示例(伪代码)

假设用Python的numpy库,代码大概是这样:

import numpy as np

# 假设已知:L, R(方阵),x, y(包含已知/未知的向量)
# 先定义索引集合U和K(比如用布尔数组或整数列表)
U = [0, 2]  # x中未知量的索引(假设0-based)
K = [1]     # x中已知量的索引

# 提取子矩阵
L_U = L[:, U]
L_K = L[:, K]
R_U = R[:, U]
R_K = R[:, K]

# 提取已知向量部分
x_K = x[K]
y_U = y[U]

# 构造常数项b
b = R_U @ y_U - L_K @ x_K

# 构造系数矩阵M
M = np.hstack([L_U, -R_K])

# 求解Mz = b
z = np.linalg.solve(M, b)

# 还原x和y的未知部分
x[U] = z[:len(U)]
y[K] = z[len(U):]

这样操作下来,完全没有打乱L和R的列结构,同时顺利完成了未知量和已知量的分离求解。

内容的提问来源于stack exchange,提问作者Pekov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:10:12