我有问题。我已经到了我的应用程序能够求解简单的 2 个方程组的地步,如下所示:
1x + 2y + 3 = 0, 2x + 3y + 4 = 0
我正在使用消除方法。但是,如果我想将方程乘以等于 0 的两个数字之一怎么办?然后它会扔垃圾。当 a 或 b 等于 0 时,是否有一些算法可以在不编写几个异常的情况下解决这个问题?非常感谢您提前。
当 a 或 b 等于 0 时,是否有一些算法可以在不编写几个异常的情况下解决这个问题?
如果行列式为零,则无解。除非您可以将ArithmeticException
除以零,否则如果不使用额外的 if/else 检查或 try/catch 块,将无法做到这一点。
在 2x2 的情况下,使用涉及行列式除法的 Cramer 规则是我认为最优雅的编程方式,因为它并不特别关心哪些系数为零;只是行列式是非零的。
有一个超级简单的解决方案,使用 Python 和 sympy 库来求解方程。
from sympy import solve, symbols
x,y = symbols('x,y')
sis = solve([x + 2 * y + 3, 2 * x + 3 * y + 4], [x,y])
print sis[x].evalf()
print sis[y].evalf()
来自 Wikipedia 的伪代码包括一个检查,以确保您不会被零除。为了完整起见,这里是一个副本:
for k = 1 ... m:
Find pivot for column k:
i_max := argmax (i = k ... m, abs(A[i, k]))
if A[i_max, k] = 0
error "Matrix is singular!"
swap rows(k, i_max)
Do for all rows below pivot:
for i = k + 1 ... m:
Do for all remaining elements in current row:
for j = k ... n:
A[i, j] := A[i, j] - A[k, j] * (A[i, k] / A[k, k])
Fill lower triangular matrix with zeros:
A[i, k] := 0
我以几 (10) 个“if”语句结束。这些算法非常难以理解(至少对我而言),因为我才上高中。无论如何,非常感谢您的所有回复:)