具有2个变量的2个线性方程组的算法

时间:2014-01-11 20:27:50

标签: java algorithm equations

我遇到了问题。我已经到了这样的程度,我的应用程序能够解决这样的2个方程的简单系统:

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

我正在使用消除方法。但是如果我想将等式中的一个乘以等于0的两个数字呢?然后它会扔垃圾。当a或b等于0时,是否有一些算法可以解决这个问题而无需编写几个例外? 非常感谢你提前。

4 个答案:

答案 0 :(得分:0)

The pseudocode from 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

答案 1 :(得分:0)

  

当a或b等于0时,是否有一些算法可以解决这个问题而不写一些例外?

如果行列式为零,则没有解决方案。除非您可以将ArithmeticException除以零,否则如果不使用额外的if / else检查或try / catch块,将无法执行此操作。

使用Cramer的规则,其中涉及由行列式划分,在2x2情况下是最优雅的编程方式,我相信,因为它没有特别关注哪些系数为零;只是决定因素是非零的。

答案 2 :(得分: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()

答案 3 :(得分:0)

我以几句(10)“if”语句结束。那些算法非常难以理解(至少对我而言),因为我只是在高中时。无论如何,非常感谢你们所有回复:)

相关问题