我試圖解決多元方程,這是一些Java代碼的結果的系統。在運行前,變量的形式和數量都是已知的。一個例子是如何解決多元方程組編程?
(I) (e-a*d*e-b*d*e+2*b*d*f+2*b*d*e*g)/(-1+a*d+b*d)+f == 0
(II) e*g+((f+e*g)*a*d)/(-1+a*d+b*d)==0
(III) -e*h+((-f-e*g)*d)/(-1+a*d+b*d)==0
(IV) -e*j+((-f-e*g)*c)/(-1+a*d+b*d)==0
我嘗試使用Symja,它簡單地返回輸入,和SymPy,這會引發一個錯誤
ZeroDivisionError: polynomial division
的變量是所有從區間[0,1],和我需要所有解決方案。數學是能夠解決這個問題,但因爲它是商業軟件,我很遺憾不能在這個項目中使用它。
我將要在其上使用的軟件的任何建議表示感謝。我真的會喜歡SymPy上班,我不明白爲什麼它會拋出這個錯誤,想法表示讚賞。下面一MWE到SymPy錯誤:
from sympy.solvers import solve
from sympy.abc import a,b,c,d,e,f,g,h,j
lst = a,b,c,d,e,f,g,h,j
sys = [(e-a*d*e-b*d*e+2*b*d*f+2*b*d*e*g)/(-1+a*d+b*d)+f,e*g+((f+e*g)*a*d)/(-1+a*d+b*d),-e*h+((-f-e*g)*d)/(-1+a*d+b*d),-e*j+((-f-e*g)*c)/(-1+a*d+b*d)]
solution = solve(sys, lst)
print solution
Mathematica的版本是:
eqn = {(e - a*d*e - b*d*e + 2*b*d*f + 2*b*d*e*g)/(-1 + a*d + b*d) + f == 0, e*g + ((f + e*g)*a*d)/(-1 + a*d + b*d) == 0, -e*h + ((-f - e*g)*d)/(-1 + a*d + b*d) == 0, -e*j + ((-f - e*g)*c)/(-1 + a*d + b*d) == 0};
Simplify[Solve[eqn, {a, b, c, d, e, f, g, h, j}]]
輸出:
{{e -> 0, f -> 0},
{c -> (1 - 2 a d - 3 b d) j, f -> ((-1 + 2 a d + b d) e)/(-1 + 2 a d + 3 b d), g -> (a d)/(1 - 2 a d - 3 b d), h -> d/(1 - 2 a d - 3 b d)},
{a -> 0, c -> j - 3 b d j, f -> ((-1 + b d) e)/(-1 + 3 b d), g -> 0, h -> d/(1 - 3 b d)},
{a -> (1 - b d)/(2 d), c -> -2 b d j, f -> 0, g -> 1/4 - 1/(4 b d), h -> -(1/(2 b))}}
你可以發表Mathematica表達式和解決方案嗎? –
你有沒有試過乘以公分母?我猜想這些工具會給出自動化的方法,但是你可以親自去做,看看它們能否解決結果。 – agentp
@agentp是的,我試過了,並且它沒有幫助,SymPy仍然拋出了同樣的錯誤 – berndibus