线性方程组求解器
按行输入未知数系数与常数项,用高斯消元精确求解二元或三元一次方程组:唯一解给出分数与小数两套结果,行列式与回代验证一并展示;系数成比例或互相矛盾时自动判定无穷多解与无解。
二元一次方程组是应用题最常见的模型:鸡兔同笼、和差倍分、浓度配比,最后都能化成「两个方程、两个未知数」。本工具按行填入每条方程的未知数系数与等号右边的常数,立即得到每个未知数的解——整数解直接给整数,分数解给出 1/5 这样的精确分数并同时给出小数近似,鸡兔同笼这类题填进去 1 秒出答案。
计算用 BigInt 有理数运算做高斯消元,而不是浮点近似:系数是 1/2、0.5 这类分数或小数时,解不会被舍入误差污染;工具同时给出系数行列式与回代验证——把解代回每条原方程,确认等式严格成立。方程互相矛盾时明确提示无解,成比例时提示无穷多解并给出独立约束条数,不糊弄。
这个工具解决你的问题了吗?
提交后会把工具名、你的输入与当前结果发送到服务器;请勿填写身份证号、手机号等隐私信息。
AI 助手 会结合你当前的输入与结果回答
追问会再次把当前输入与结果发送到服务器;请勿填写隐私信息。
使用步骤
- 选择方程元数:二元一次(2 个未知数)或三元一次(3 个未知数)。
- 每行填一条方程:从左到右填各未知数的系数,最后一格填等号右边的常数。
- 系数支持整数、小数与分数(如 0.5、1/2、-3)。
- 看求解结果:分数与小数两套解、系数行列式与回代验证;无解与无穷多解会明确说明原因。
计算原理与示例
BigInt 高斯消元全程精确
高斯消元的思路是「逐列消元」:用第一行把下面各行 x 的系数消成 0,再用第二行消去 z……最后化成阶梯形,从最后一行往回代就能解出全部未知数。本工具用 BigInt 有理数实现每一步加减乘除,全程没有浮点舍入,所以 1/5 这样的解是精确的分数而不是 0.20000001。
三种解形态的判定逻辑
唯一解、无解、无穷多解的判定看化简结果:系数行列式不为 0 时必有唯一解;化简后出现「0 = 非零常数」的矛盾行是无解(两条约束互相冲突,如 x+y=1 与 x+y=2);秩不足但没有矛盾行则是无穷多解(几个方程本质上是同一条约束)。工具直接给出判定结果与原因,不会硬算出一个假解。
回代验证与典型应用
回代验证是最后一道保险:把解代入每一条原方程,用精确分数重新计算等号两边是否严格相等。教学上这也是要求学生掌握的步骤——解完方程代回去检查一遍。鸡兔同笼(x+y=35 与 2x+4y=94)这类应用题,填入系数就能在 1 秒内得到鸡 23 只、兔 12 只的精确答案。
代码示例
JavaScript 二元用克拉默法则,三元走高斯消元
// 二元一次方程组 a1x + b1y = c1 / a2x + b2y = c2:行列式为零则无解或无穷多解
function solve2(a1, b1, c1, a2, b2, c2) {
const det = a1 * b2 - a2 * b1;
if (det === 0) { return null; }
return { x: (c1 * b2 - c2 * b1) / det, y: (a1 * c2 - a2 * c1) / det };
}
// 三元及以上:高斯消元 + 回代(列主元,避免主元接近 0 时误差放大)
function solveGauss(m) {
const n = m.length;
for (let i = 0; i < n; i++) {
let p = i;
for (let r = i + 1; r < n; r++) { if (Math.abs(m[r][i]) > Math.abs(m[p][i])) { p = r; } }
[m[i], m[p]] = [m[p], m[i]]; // 交换主元行
for (let r = i + 1; r < n; r++) {
const f = m[r][i] / m[i][i];
for (let c = i; c <= n; c++) { m[r][c] -= f * m[i][c]; }
}
}
const x = new Array(n).fill(0);
for (let i = n - 1; i >= 0; i--) {
let s = m[i][n];
for (let c = i + 1; c < n; c++) { s -= m[i][c] * x[c]; }
x[i] = s / m[i][i];
}
return x;
}
Python 交给 numpy 解
import numpy as np
# 系数矩阵 A 与常数向量 b:A @ x = b
A = np.array([[2.0, 1.0, -1.0],
[-3.0, -1.0, 2.0],
[-2.0, 1.0, 2.0]])
b = np.array([8.0, -11.0, -3.0])
x = np.linalg.solve(A, b) # 奇异矩阵会抛 LinAlgError
print(x) # [ 2. 3. -1.]
# 需要判断「无解 / 无穷多解」时先看行列式
print(np.linalg.det(A))
常见问题
方程组什么时候无解?
把方程化成阶梯形后出现「0 = 非零常数」就是无解:两条约束互相矛盾,比如 x+y=1 与 x+y=2。几何上是两条平行直线,没有交点。工具会直接说明这一点,而不是硬算出一个数。
什么时候有无穷多解?
系数行列式为 0 且方程相容时:比如 x+y=1 与 2x+2y=2,第二个方程只是第一个的两倍,本质是同一条约束。两条直线重合,直线上所有点都是解。工具会给出独立约束的条数。
系数可以填分数吗?
可以。1/2 这类分数会按有理数精确参与运算,比先化成 0.5 更准;整数、小数、分数可以混填,负号直接写在数字前。
系数行列式有什么用?
行列式不为 0 是唯一解的充分条件;在克拉默法则里,每个未知数等于「替换一列后的行列式」除以系数行列式。行列式为 0 时方程组要么无解要么无穷多解,工具据此分流判定。
回代验证是什么?
把求出的解代入每一条原方程,用精确分数重新计算等式两边是否严格相等。这是计算正确性的自检:显示「已回代验证」就说明这组解确实同时满足所有方程。
三元方程组也能解吗?
可以。切换到「三元一次」模式后每行填四个数:x、y、z 的系数与常数项,共三行。解法同样是精确高斯消元,解出 x、y、z 三个未知数的分数与小数值。
解的小数近似是怎么来的?
由精确分数直接换算而来(如 1/5 就是 0.2),不是浮点迭代的结果。需要更多位数时可以按分数自行扩展,不会累积误差。
延伸阅读
来自本站原创文章,讲清这个工具背后的算法与口径。