我遇到了问题。我已经到了这样的程度,我的应用程序能够解决这样的2个方程的简单系统:
1x + 2y + 3 = 0, 2x + 3y + 4 = 0
我正在使用消除方法。但是如果我想将等式中的一个乘以等于0的两个数字呢?然后它会扔垃圾。当a或b等于0时,是否有一些算法可以解决这个问题而无需编写几个例外? 非常感谢你提前。
答案 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”语句结束。那些算法非常难以理解(至少对我而言),因为我只是在高中时。无论如何,非常感谢你们所有回复:)