2014-01-11 3 views
-1

У меня проблема. Я пришел к точке, где мое приложение способно решить простую систему уравнений 2, как это:Алгоритм для системы из 2 линейных уравнений с 2 ​​переменными

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

Я использую метод исключения. Но что, если одно из двух чисел я хочу умножить уравнение с равными 0? Тогда это бросит дерьмо. Есть ли какой-нибудь алгоритм для решения этой проблемы, не записывая пару исключений, когда a или b равно 0? Спасибо вам большое заблаговременно.

+0

Вы знаете о алгоритме Крамера для решения системы уравнений? –

+0

Я никогда не слышал об этом. Не можете найти что-нибудь полезное в Google, не могли бы вы объяснить это? – bubakovsky

+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 
0

Есть ли алгоритм для решения этой проблемы, не написав несколько исключений, когда или б равен 0?

Если детерминант равен нулю, решения не будет. Если вы не выбрали ArithmeticException при делении на ноль, не будет никакого способа сделать это без использования дополнительной проверки if/else или блока try/catch.

Использование правила Крамера, которое включает деление на детерминант, в случае 2x2 - самый изящный способ программирования этого, я считаю, поскольку он не имеет особого значения, какие коэффициенты равны нулю; что детерминант отличен от нуля.

+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) утверждений «если». Эти алгоритмы очень сложно (по крайней мере для меня) понять, поскольку я только в старшей школе. В любом случае, спасибо за ответы:

Смежные вопросы