On Tue, 23 Feb 2021 at 21:06, Bruno Nicenboim <bruno.nicenb...@gmail.com> wrote: > > On Tuesday, February 23, 2021 at 9:53:03 PM UTC+1 Oscar wrote: >> >> On Tue, 23 Feb 2021 at 18:08, Bruno Nicenboim <bruno.n...@gmail.com> wrote: >> > >> > Hi, >> > This is my first email. I'm starting to use sympy, which I find >> > fascinating, and I have some questions that couldn't be answered after >> > going through the documentation and stackoverflow website. >> >> Hi Bruno and welcome! >> >> Feel free to ask questions here. I didn't see any actual questions in >> your email though... >> > Yeah, I just wanted to check that the mail goes through :) > > I'm cross posting with stackoverflow where I didn't get any answer: > https://stackoverflow.com/questions/66200069/restricting-the-domain-of-the-solution-of-solveset-with-sympy > > I'm trying to impose a constraint on the variable that I want to solve for > with sympy. (That is setting a domain that needs to be respected). And I want > to use `solveset` (I've seen other answers that use `solve`). > > Say I have the following `K_p` and I want to solve `K_p - x = 0` for `t`: > > ``` > from sympy import * > psi, mu_1, mu_2, tau, t, x = symbols("psi, mu_1, mu_2, tau, t, x", positive = > True, real = True) > K_p =(mu_1*mu_2*psi*t**2*tau**4 - 2*mu_1*mu_2*t*tau**2 - mu_1*psi*t*tau**2 + > mu_1 - mu_2*psi*t*tau**2 + mu_2 + psi)/(mu_1*mu_2*t**2*tau**4 - mu_1*t*tau**2 > - mu_2*t*tau**2 + 1) > ``` > > How do I impose the following constraints: > `t < 1/(mu_1 * tau**2)` and `t < 1/(mu_2 * tau**2)` > > If I do this I have an extra solution that shouldn't be there: > ``` > s_x = solveset(K_p - x, t, domain=S.Reals) > ```
I don't think your constraints are enough to determine what the correct solution should be. For example if we have the values: {mu_1:1, mu_2:2, tau:2, psi:1, x:2} Then neither solution satisfies the constraint: In [218]: rep = {mu_1:1, mu_2:2, tau:2, psi:1, x:S.Half} In [219]: conditions = And(t < 1/(mu_1 * tau**2), t < 1/(mu_2 * tau**2)) In [220]: eq = K_p - x In [221]: solve(eq.subs(rep)) Out[221]: ⎡11 √65 √65 11⎤ ⎢── - ───, ─── + ──⎥ ⎣16 16 16 16⎦ In [222]: r1, r2 = solve(eq.subs(rep)) In [223]: conditions.subs(rep).subs(t, r1) Out[223]: False In [224]: conditions.subs(rep).subs(t, r2) Out[224]: False -- Oscar -- 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/CAHVvXxTzN5zMMUkNjXh%3Dbf5s4_mxVc%2BGzQpMCu1CmCQkyr5tVA%40mail.gmail.com.