On Feb 16, 2011, at 10:43 AM, Mateusz Paprocki wrote:

> Hi,
> 
> On 16 February 2011 04:49, Vinzent Steinberg 
> <[email protected]> wrote:
> Hi,
> 
> On 16 Feb., 10:37, jeal2 <[email protected]> wrote:
> > Hello,
> >
> > I'm trying to use Python to solve (symbolically, for x, y and a0) the
> > following set of three simultaneous equations:
> > lam+2*y-a0*(1 - x/2)*x-0.005*x/2*x==0
> > a0*(1 - x/2)*x-1*y-0.743436700916726*y==0
> > x+y-conc==0
> >
> > I don't see any reason it should be mathematically difficult - just
> > complicated and tedious - and Mathematica can do it without any
> > trouble. But when I give it to Python it just starts working and
> > doesn't finish. Do you have any idea why?
> >
> > >>> from sympy import *
> > >>> lam=Symbol('lam')
> > >>> a0=Symbol('a0')
> > >>> conc=Symbol('conc')
> > >>> x=Symbol('x')
> > >>> y=Symbol('y')
> >
> > # this works ok:>>> solve([lam+2*y-a0*(1 - x/2)*x-0.005*x/2*x], [x])
> >
> > [(-(-4*(-4*y - 2*lam)/(0.005 - a0) + 4*a0**2/(0.005 - a0)**2)**(1/2)/2
> > - a0/(0.005 - a0),), ((-4*(-4*y - 2*lam)/(0.005 - a0) + 4*a0**2/(0.005
> > - a0)**2)**(1/2)/2 - a0/(0.005 - a0),)]
> >
> > # but this doesn't
> >
> > >>> solve([lam+2*y-a0*(1 - x/2)*x-0.005*x/2*x, a0*(1 - 
> > >>> x/2)*x-1*y-0.743436700916726*y, x+y-conc], [x, y,a0])
> >
> > If you have any ideas I would be very grateful!
> > Thanks.
> 
> With current master I get this traceback:
> 
> In [4]: eqs = [lam+2*y-a0*(1 - x/2)*x-0.005*x/2*x, a0*(1 - x/
> 2)*x-1*y-0.743436700916726*y, x+y-conc]
> 
> In [5]: sym = [x,y,a0]
> 
> In [6]: solve(eqs, sym)
> ---------------------------------------------------------------------------
> ExactQuotientFailed                       Traceback (most recent call
> last)
> 
> /home/one/src/sympy/<ipython console> in <module>()
> 
> /home/one/src/sympy/sympy/solvers/solvers.pyc in solve(f, *symbols,
> **flags)
>    379                 soln = solve_linear_system(matrix, *symbols,
> **flags)
>    380             else:
> --> 381                 soln = solve_poly_system(polys)
>    382
>    383             # Use swap_dict to ensure we return the same type
> as what was
> 
> 
> /home/one/src/sympy/sympy/solvers/polysys.pyc in
> solve_poly_system(system, *gens)
>    104         raise TypeError("expected iterable container, got %s"
> % system)
>    105
> --> 106     solutions = solve_reduced_system(system, gens, entry=True)
>    107
>    108     if solutions is None:
> 
> /home/one/src/sympy/sympy/solvers/polysys.pyc in
> solve_reduced_system(system, gens, entry)
>     55     def solve_reduced_system(system, gens, entry=False):
>     56         """Recursively solves reduced polynomial systems. """
> ---> 57         basis = groebner(system, gens, polys=True)
>     58
>     59         if len(basis) == 1 and basis[0].is_ground:
> 
> /home/one/src/sympy/sympy/polys/polytools.pyc in groebner(F, *gens,
> **args)
>   2373         F[i] = sdp_from_dict(f.rep.to_dict(), order)
>   2374
> -> 2375     G = sdp_groebner(F, lev, order, dom)
>   2376
>   2377     G = [ Poly(DMP(dict(g), dom, lev), *gens) for g in G ]
> 
> /home/one/src/sympy/sympy/polys/groebnertools.pyc in sdp_groebner(F,
> u, O, K)
>    620
>    621         p = sdp_mul_term(p, (monomial_div(M, p_LM),
> K.quo(K.one, sdp_LC(p, K))), u, O, K)
> --> 622         q = sdp_mul_term(q, (monomial_div(M, q_LM),
> K.quo(K.one, sdp_LC(q, K))), u, O, K)
>    623
>    624         h = normal(sdp_sub(p, q, u, O, K), G)
> 
> /home/one/src/sympy/sympy/polys/algebratools.pyc in quo(self, a, b)
>    462         """Quotient of `a` and `b`, implies `__floordiv__`.
> """
>    463         if a % b:
> --> 464             raise ExactQuotientFailed('%s does not divide %s
> in %s' % (b, a, self))
>    465         else:
>    466             return a // b
> 
> ExactQuotientFailed: DMP([[Fraction(-1471256443825,
> 2309382115472961)], [Fraction(294251288765000, 2309382115472961),
> Fraction(0, 1)]], QQ) does not divide DMP([[Fraction(1, 1)]], QQ) in
> QQ[conc,lam]
> 
> So it seems related to polynomials. Mateusz, any idea why this fails?
> Maybe the operation should rather be done over RR[conc,lam]?
> 
> Yes, recently I added support for domains of this kind, so now (polys12) 
> solve() gives:
> 
> DomainError: can't compute a Groebner basis over RR
> 
> for this example.

Can this ever be implemented?  Or are there numerical algorithms that can solve 
systems of polynomial equations (like an extension of nsolve())?

Aaron Meurer

> 
> 
> Vinzent
> 
> Mateusz
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "sympy" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to 
> [email protected].
> For more options, visit this group at 
> http://groups.google.com/group/sympy?hl=en.

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/sympy?hl=en.

Reply via email to