-1

我有问题。我已经到了我的应用程序能够求解简单的 2 个方程组的地步,如下所示:

1x + 2y + 3 = 0, 2x + 3y + 4 = 0

我正在使用消除方法。但是,如果我想将方程乘以等于 0 的两个数字之一怎么办?然后它会扔垃圾。当 a 或 b 等于 0 时,是否有一些算法可以在不编写几个异常的情况下解决这个问题?非常感谢您提前。

4

4 回答 4

0

当 a 或 b 等于 0 时,是否有一些算法可以在不编写几个异常的情况下解决这个问题?

如果行列式为零,则无解。除非您可以将ArithmeticException除以零,否则如果不使用额外的 if/else 检查或 try/catch 块,将无法做到这一点。

在 2x2 的情况下,使用涉及行列式除法的 Cramer 规则是我认为最优雅的编程方式,因为它并不特别关心哪些系数为零;只是行列式是非零的。

于 2014-01-11T20:38:08.417 回答
0

有一个超级简单的解决方案,使用 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()
于 2014-01-11T20:39:55.010 回答
0

来自 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
于 2014-01-11T20:33:20.617 回答
0

我以几 (10) 个“if”语句结束。这些算法非常难以理解(至少对我而言),因为我才上高中。无论如何,非常感谢您的所有回复:)

于 2014-01-13T15:40:45.793 回答