2014-01-11 4 views
-1

문제가 있습니다. 나는 내 애플 리케이션이 같은 2 방정식의 간단한 시스템을 해결할 수있는 지점에 왔습니다 :2 개의 변수가있는 2 선형 방정식 시스템의 알고리즘

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

나는 제거 방법을 사용하고 있습니다. 그러나 방정식을 곱하기를 원하는 두 숫자 중 하나가 0이면 어떻게 될까요? 그런 다음 쓰레기를 던질 것입니다. a 또는 b가 0 일 때 몇 가지 예외를 작성하지 않고이를 해결하는 알고리즘이 있습니까? 미리 감사드립니다.

+0

방정식 시스템을 해결하기위한 Cramer 알고리즘에 대해 알고 계십니까? –

+0

나는 들어 본 적이 없다. Google에서 사용할 수있는 것을 찾을 수 없습니다. 설명해 주시겠습니까? – bubakovsky

+0

그런 시스템을 해결하는 가장 좋은 방법입니다. –

답변

0

The pseudocode from Wikipedia에는 0으로 나누지 않는지 확인하는 체크가 포함되어 있습니다. A 또는 B가 0 일 몇 가지 예외를 작성하지 않고이 문제를 해결하기 위해 어떤 알고리즘이

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 
0

있습니까 : 완성도를 들어, 여기에 복사본입니다?

결정자가 0이면 솔루션이 없습니다. ArithmeticException을 0으로 나누면 괜찮습니다. 추가 if/else 체크 또는 try/catch 블록을 사용하지 않으면이 작업을 수행 할 수 없습니다.

결정자에 의한 나눗셈을 포함하는 Cramer의 규칙을 사용하면 2x2의 경우에 어떤 계수가 0인지 특별히 신경 쓰지 않기 때문에 이것을 프로그래밍하는 가장 우아한 방법입니다. 행렬식이 0이 아닌 것뿐입니다.

+0

결정자가 0 인 경우 솔루션이 없다는 것은 사실이 아닙니다. 솔루션이 없거나 무한히 많은 솔루션이있을 수 있습니다. – Henry

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() 
0

두 개의 (10) "if"문으로 끝났습니다. 그 알고리즘은 내가 고등학교에만있는 것처럼 (적어도 나를 위해) 이해하기가 매우 어렵다. 어쨌든 모든 응답을 주셔서 대단히 감사합니다 :)