【发布时间】:2017-01-04 10:34:49
【问题描述】:
我正在尝试求解一个多元方程系统,这是一些 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],我需要所有的解决方案。 Mathematica 能够解决这个问题,但由于它是商业软件,我很遗憾不能在这个项目中使用它。
如果您有任何关于使用哪种软件的建议,我将不胜感激。我真的希望 SymPy 能够正常工作,但我不明白为什么它会抛出这个错误,我很感激你的想法。下面是 SymPy 错误的 MWE:
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 是的,我试过了,但没有帮助,SymPy 仍然抛出同样的错误
标签: java wolfram-mathematica sympy equation-solving symja