Hi Jeremy,

many thanks for the scipy link. I will experiment with it.

Rainer

Am Dienstag, 16. August 2022, 06:03:16 CEST schrieb Jeremy Monat:
> SymPy cannot (currently) reduce for multiple variables. As the draft guide
> page
> <https://output.circle-artifacts.com/output/job/99b313eb-c111-406f-81e3-22dc
> f5d7c9fa/artifacts/0/doc/_build/html/guides/solving/solve-system-of-inequali
> ties-algebraically.html> mentions, to reduce for more than one symbol, try
> SciPy’s linprog()
> <https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.linpro
> g.html#scipy.optimize.linprog>. (If there is no solution, obviously no
> function will find one.)
> 
> Jeremy
> 
> On Mon, Aug 15, 2022 at 10:48 PM Chris Smith <smi...@gmail.com> wrote:
> > Ignore your equality `5*x + 2*y+3*z=5` and see if a solution exists for
> > 
> > the condition you specify:
> > >>> LP(
> > 
> > ... x*2-y-z-5,[x <= 1, y <= 1,z <= 1,x>0,y>0,z>0],[x,y,z])
> > (-3, {x: 1, y: 0, z: 0}, _y0 + _y1 + _y2 - 5, [_y0 - _y3 - 2 >= 0, _y1 -
> > _y4 + 1 >= 0, _y2 - _y5 + 1 >= 0], {_y0: 2, _y1: 0, _y2: 0, _y3: 0, _y4:
> > 0,
> > _y5: 0})
> > 
> > The maximum that 2*x - y - z - 5 can be is -3 but you want it to be
> > greater than 0. So there is no solution, is there?
> > 
> > /c
> > 
> > On Monday, August 15, 2022 at 3:30:43 AM UTC-5 m...@bokomoko.de wrote:
> >> Hi Chris,
> >> 
> >> many thanks for the link to the stack overflow answer and in particular
> >> the PR
> >> and also the elegant suggestion on how to address the problem with linear
> >> programming.
> >> 
> >> I realized that I oversimplified the example though:
> >> 
> >> The problem I want to solve is a vector equation:
> >> 
> >> f_vec+a*x_vec+b*y_vec+n*s_vec=sh_vec+c*xsh_vec+d*ysh_vec
> >> 
> >> and I am looking for a solution with
> >> 
> >> 0<=a,b,c,d<=1
> >> 
> >> I.e. there is more than one equation which need to be satisfied for the
> >> same x
> >> and y:
> >> 
> >> print(sympy.solvers.inequalities.reduce_rational_inequalities([[x*5 + y*2
> >> +z*3=5,x*2-y-z>5,x <= 1, x >= 0, y <= 1, y >= 0,z <= 1, z >= 0]],
> >> [x,y,z]))
> >> 
> >> I see no obvious way to apply your method to a set of multiple equations,
> >> but
> >> it might due to my lack of experience with linear programming.
> >> 
> >> Thanks again
> >> Rainer
> >> 
> >> Am Mittwoch, 10. August 2022, 23:03:29 CEST schrieb Chris Smith:
> >> > You can't enter your expressions with `=` to create and Equality. You
> >> 
> >> would
> >> 
> >> > have to reenter as Eq(5*x+2*y,10) or
> >> > `parse_expr('5*x+2*y=10',transformations=T[1,9]')` (see
> >> > [here](https://stackoverflow.com/a/73307040/1089161)).
> >> > 
> >> > Past that, there is no SymPy function that will solve this, but in
> >> > PR https://github.com/sympy/sympy/pull/22389 I added code today that
> >> 
> >> will
> >> 
> >> > do so.
> >> > 
> >> > Your equality will be treated like a function to maximize under the
> >> > 
> >> > constrains that x<=1 and y<=1 (and both are nonnegative):
> >> > >>> func = 5*x+2*y-10
> >> > >>> cond = [x<=1, y<=1]
> >> > >>> LP(func, cond, [x,y])[:2]
> >> > 
> >> > (-3, {x: 1, y: 1})
> >> > 
> >> > So that function has a maximum value of -3 when x and y are 1. Now
> >> 
> >> negate
> >> 
> >> > the function and repeat
> >> > 
> >> > >>> LP(-func, cond, [x,y])[:2]
> >> > 
> >> > (10, {x: 0, y: 0})
> >> > 
> >> > The max of the negated function is 10 when x and y are 0. So the min of
> >> 
> >> the
> >> 
> >> > function is -10. You are interested in the case when the function is 0.
> >> > Since the function is linear and has as bounds [-10, -3] which does not
> >> > contain 0, it seems to me that this proves there is no solution.
> >> > 
> >> > /c
> >> > 
> >> > On Tuesday, August 9, 2022 at 10:46:55 AM UTC-5 m...@bokomoko.de
> >> 
> >> wrote:
> >> > > Hi Jeremy,
> >> > > 
> >> > > thanks for sharing your link and thanks for compiling the
> >> 
> >> documentation.
> >> 
> >> > > And
> >> > > indeed it helped, with the information I could easily fix it:
> >> > > 
> >> > > rd@h370:~/tmp.nobackup$ cat test-sympy.py
> >> > > import sympy
> >> > > 
> >> > > x, y, z = sympy.symbols('x y z')
> >> > > sympy.init_printing(use_unicode=True)
> >> > > 
> >> > > print(sympy.solvers.inequalities.reduce_rational_inequalities([[x + 2
> >> > > 
> >> > > 0]],
> >> > > x))
> >> > > 
> >> > > 
> >> > > print(sympy.solvers.inequalities.reduce_rational_inequalities([[x + 2
> >> > > 
> >> > > 0,x <
> >> > > 5]], x))
> >> > > rd@h370:~/tmp.nobackup$ python3 test-sympy.py
> >> > > (-2 < x) & (x < oo)
> >> > > (-2 < x) & (x < 5)
> >> > > rd@h370:~/tmp.nobackup$
> >> > > 
> >> > > I read through your page and posted some feedback at
> >> > > 
> >> > > https://github.com/sympy/sympy/pull/23768
> >> > > 
> >> > > My real problem is somewhat more complex though:
> >> > > 
> >> > > I want to find out if
> >> > > 
> >> > > f_vec+a*x_vec+b*y_vec+n*s_vec=sh_vec+c*xsh_vec+d*ysh_vec
> >> > > 
> >> > > has a solution with
> >> > > 
> >> > > 0<=a,b,c,d<=1
> >> > > 
> >> > > All quantities with _vec are 3 dimensional vectors. I want to to find
> >> 
> >> out
> >> 
> >> > > if
> >> > > for a given set of vectors a solution exists or not.
> >> > > 
> >> > > Extending my testcase in this direction does not work though:
> >> > > 
> >> > > rd@h370:~/tmp.nobackup$ cat test-sympy.py
> >> > > import sympy
> >> > > 
> >> > > x, y, z = sympy.symbols('x y z')
> >> > > sympy.init_printing(use_unicode=True)
> >> > > 
> >> > > print(sympy.solvers.inequalities.reduce_rational_inequalities([[x + 2
> >> > > 
> >> > > 0]],
> >> > > x))
> >> > > 
> >> > > print(sympy.solvers.inequalities.reduce_rational_inequalities([[x*5 +
> >> 
> >> y*2
> >> 
> >> > > =
> >> > > 10,x <= 1, x >= 0, y <= 1, y >= 0]], x))
> >> > > rd@h370:~/tmp.nobackup$ python3 test-sympy.py
> >> > > File "/home/rd/tmp.nobackup/test-sympy.py", line 9
> >> > > print(sympy.solvers.inequalities.reduce_rational_inequalities([[x*5 +
> >> 
> >> y*2
> >> 
> >> > > = 10,x <= 1, x >= 0, y <= 1, y >= 0]], x))
> >> > > ^
> >> > > SyntaxError: invalid syntax
> >> > > rd@h370:~/tmp.nobackup$
> >> > > 
> >> > > I suspect that reduce_rational_inequalities is the wrong approach
> >> 
> >> here,
> >> 
> >> > > but
> >> > > what would the the right functions to use?
> >> > > 
> >> > > Any hint is welcome :-)
> >> > > 
> >> > > Many thanks
> >> > > Rainer
> >> > > 
> >> > > PS: Also thanks for hint towards less-verbose function calls. I
> >> 
> >> typically
> >> 
> >> > > write it verbose, since I am not writing Python code too frequently,
> >> 
> >> and
> >> 
> >> > > for
> >> > > me the verbose version is something like a documentation, since I see
> >> > > where
> >> > > the functions come from.
> >> > > 
> >> > > Am Samstag, 6. August 2022, 17:19:45 CEST schrieb Jeremy Monat:
> >> > > > Hi Ranier,
> >> > > > 
> >> > > > Here's a way to do it:
> >> > > > >>> import sympy
> >> > > > >>> x, y, z = sympy.symbols('x y z')
> >> > > > >>> sympy.solvers.inequalities.reduce_inequalities([x + 2 > 0, x <
> >> 
> >> 5],
> >> 
> >> > > > >>> x)
> >> > > > 
> >> > > > (-2 < x) & (x < 5)
> >> > > > 
> >> > > > reduce_inequalities is the top-level inequality reducer, which will
> >> 
> >> call
> >> 
> >> > > > other lower-level functions (such as reduce_rational_inequalities)
> >> 
> >> as
> >> 
> >> > > > needed. reduce_inequalities takes a simple list, rather than a
> >> 
> >> nested
> >> 
> >> > > list,
> >> > > 
> >> > > > of inequalities.
> >> > > > 
> >> > > > I'm actually drafting a guide page on this topic now; glad to know
> >> 
> >> it's
> >> 
> >> > > of
> >> > > 
> >> > > > interest! You can access the draft
> >> > > > <
> >> 
> >> https://output.circle-artifacts.com/output/job/a1f8297d-6be8-4627-9f47-a9
> >> 6
> >> 
> >> > > 9
> >> 
> >> 709f9293/artifacts/0/doc/_build/html/guides/solving/solve-system-of-inequ
> >> a
> >> 
> >> > > li>
> >> > > 
> >> > > > ties-algebraically.html>, and I'd appreciate any feedback (either
> >> 
> >> here
> >> 
> >> > > or on
> >> > > 
> >> > > > the pull request <https://github.com/sympy/sympy/pull/23768> on
> >> 
> >> GitHub).
> >> 
> >> > > > Best,
> >> > > > Jeremy
> >> > > > 
> >> > > > P.S. If you like, you can use less-verbose function calls by
> >> 
> >> importing
> >> 
> >> > > > reduce_inequalities and symbols from SymPy:
> >> > > > >>> from sympy import reduce_inequalities, symbols
> >> > > > >>> x, y, z = symbols('x y z')
> >> > > > >>> reduce_inequalities([x + 2 > 0, x < 5], x)
> >> > > > 
> >> > > > (-2 < x) & (x < 5)
> >> > > > 
> >> > > > On Sat, Aug 6, 2022 at 3:31 AM 'Rainer Dorsch' via sympy <
> >> > > > 
> >> > > > sy...@googlegroups.com> wrote:
> >> > > > > Hi,
> >> > > > > 
> >> > > > > I just started with sympy, and try to understand how to tell
> >> 
> >> sympy,
> >> 
> >> > > what I
> >> > > 
> >> > > > > want. I tried
> >> > > > > print(sympy.solvers.inequalities.reduce_rational_inequalities([[x
> >> 
> >> + 2
> >> 
> >> > > > > 0],[x
> >> > > > > < 5]], x))
> >> > > > > and expected
> >> > > > > (-2 < x) & (x < 5)
> >> > > > > but got
> >> > > > > (-oo < x) & (x < oo)
> >> > > > > Can anybody tell how I can tell sympy that x should satisfy both
> >> > > > > inequalities
> >> > > > > the same time?
> >> > > > > For me it seems sympy rather interprets the set of equations
> >> 
> >> rather as
> >> 
> >> > > an
> >> > > 
> >> > > > > "or"
> >> > > > > and not an "and"
> >> > > > > 
> >> > > > > Here is the full example
> >> > > > > 
> >> > > > > rd@h370:~/tmp.nobackup$ cat test-sympy.py
> >> > > > > import sympy
> >> > > > > 
> >> > > > > x, y, z = sympy.symbols('x y z')
> >> > > > > sympy.init_printing(use_unicode=True)
> >> > > > > 
> >> > > > > print(sympy.solvers.inequalities.reduce_rational_inequalities([[x
> >> 
> >> + 2
> >> 
> >> > > > > 0]],
> >> > > > > x))
> >> > > > > 
> >> > > > > 
> >> > > > > print(sympy.solvers.inequalities.reduce_rational_inequalities([[x
> >> 
> >> + 2
> >> 
> >> > > > > 0],[x
> >> > > > > < 5]], x))
> >> > > > > rd@h370:~/tmp.nobackup$ python3 test-sympy.py
> >> > > > > (-2 < x) & (x < oo)
> >> > > > > (-oo < x) & (x < oo)
> >> > > > > rd@h370:~/tmp.nobackup$
> >> > > > > 
> >> > > > > 
> >> > > > > Any hint is welcome.
> >> > > > > 
> >> > > > > Thanks
> >> > > > > Rainer
> >> > > > > 
> >> > > > > 
> >> > > > > --
> >> > > > > Rainer Dorsch
> >> > > > > http://bokomoko.de/
> >> > > > > 
> >> > > > > 
> >> > > > > --
> >> > > > > You received this message because you are subscribed to the
> >> 
> >> Google
> >> 
> >> > > Groups
> >> > > 
> >> > > > > "sympy" group.
> >> > > > > To unsubscribe from this group and stop receiving emails from it,
> >> 
> >> send
> >> 
> >> > > an
> >> > > 
> >> > > > > email to sympy+un...@googlegroups.com.
> >> > > > > To view this discussion on the web visit
> >> > > > > https://groups.google.com/d/msgid/sympy/4120287.OZXsGyJSKq%40h370
> >> > > > > .
> >> 
> >> --
> >> Rainer Dorsch
> >> http://bokomoko.de/
> >> 
> >> 
> >> --
> > 
> > You received this message because you are subscribed to the Google Groups
> > "sympy" group.
> > To unsubscribe from this group and stop receiving emails from it, send an
> > email to sympy+unsubscr...@googlegroups.com.
> > To view this discussion on the web visit
> > https://groups.google.com/d/msgid/sympy/6f40ebd5-46f0-4bd9-b5d4-1e703ff1db
> > f2n%40googlegroups.com
> > <https://groups.google.com/d/msgid/sympy/6f40ebd5-46f0-4bd9-b5d4-1e703ff1
> > dbf2n%40googlegroups.com?utm_medium=email&utm_source=footer> .


-- 
Rainer Dorsch
http://bokomoko.de/


-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sympy+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sympy/2196708.O6vEyn46r2%40h370.

Reply via email to