Hi Aaron,

Thanks for the reply, I'll return all the four solutions then.

Hope we can come up with a neat fix to the bug.

Regards,
Thilina




On Fri, Aug 30, 2013 at 7:59 AM, Aaron Meurer <[email protected]> wrote:

> I looked into the bug, and I can see what the issue is and how it
> should be fixed, but I'm not sure what the best way to actually do it
> is. Mateusz would be the best person to say, as he wrote all that
> code. See the issue page for more details, but basically any solution
> I can think of requires implementing a bunch of functionality (except
> for maybe some really hackish ones).
>
> Aaron Meurer
>
> On Thu, Aug 29, 2013 at 7:57 PM, Aaron Meurer <[email protected]> wrote:
> > On Thu, Aug 29, 2013 at 7:19 PM, Thilina Rathnayake
> > <[email protected]> wrote:
> >> Hi Everyone,
> >>
> >> I have completed most of my work related to Diophantine equation
> Module. It
> >> will be really
> >> helpful if you can test my current work in Github. Some of them are
> already
> >> merged in master.
> >> But I recommend using the code from this branch since it contains fixes
> for
> >> some bugs and
> >> considerably faster due to the usage of `sqrt_mod()` function for
> solving
> >> quadratic congruences.
> >>
> >> Also, Please use Python2. Otherwise you will come across this bug.
> >>
> >> FUNCTIONS
> >> =========
> >>
> >> Main routine of the Diophantine Module is `diophantine()`. You can use
> >> `diop_solve()` also.
> >> Both of the function has to be imported from `sympy.solvers.diophantine`
> >>
> >>> In [1]: from sympy.solvers.diophantine import diop_solve, diophantine
> >>
> >>
> >> Difference between diophantine() and diop_solve() is that diophantine()
> >> solves the input equation
> >> by factorizing and diop_solve()) try to solve the equation as is. For
> >> example, if the input equation
> >> is `y**2 - 7*x*y`, diop_solve() try to solve this by assuming this as a
> >> quadratic binary form and
> >> diophantine() works with the factorization y*(y - 7*x).
> >>
> >>> In [2]: from sympy.abc import x, y, z
> >>>
> >>> In [3]: diophantine(y**2 - 7*x*y)
> >>> Out[3]: set([(n₁, 0), (-t, -7⋅t)])
> >>>
> >>> In [4]: diop_solve(y**2 - 7*x*y)
> >>> Out[4]: set([(-t, 0), (-t, -7⋅t)])
> >>
> >>
> >> In general, these methods give different results and diophantine() adds
> more
> >> coverage. It's always
> >> better to use diophantine() rather than diop_solve().
> >>
> >> Summary of some of the internal functions used by the module
> >>
> ------------------------------------------------------------------------------------------
> >>
> >> There is no need to use these functions directly for testing. `eq` is an
> >> expression which is assumed to
> >> be zero. D, N are integers.
> >>
> >> diop_linear(eq) -- Solves linear diophantine equations
> >> diop_quadratic(eq) -- Solves binary quadratic forms
> >> diop_ternary_quadratic(eq) -- Solves the ternary quadratic forms
> >> diop_ternary_quadratic_norma(eq) -- Solves the specail ternary quadratic
> >> form, ax**2 + by**2 + cz**2 = 0
> >>
> >> Following functions are associated with the Pell equation. These are
> called
> >> directly / indirectly by
> >> diop_quadratic().
> >>
> >> find_DN(eq) -- Return D, N such that input equation can be written as
> x**2 -
> >> D*y**2 = N
> >> diop_DN(D, N) -- Solves the equation x**2 - D*y**2 = N
> >>
> >>
> >> EQUATION TYPES
> >> ==============
> >>
> >> Currently following types of equations are implemented. All the
> >> coefficients(a, b, c, .., D) involved
> >> are integers.
> >>
> >> [1] Linear Diophantine Equations: Equations of the form ax + by + cz +
> ....
> >> = m
> >> [2] Binary Quadratic Equations: Equations of the form ax**2 + bx*y +
> cy**2 +
> >> dx + ey + f = 0
> >>      Especially give attention to the equations of the form x**2 -
> D*y**2 -
> >> N = 0, which is the general
> >>      Pell equation.
> >>
> >> [3] Ternary Quadratic Equations: Equations of the form ax**2 + by**2 +
> cz**2
> >> + dxy + eyz + fxz = 0
> >>
> >> Currently, Implementation of ternary quadratic forms return a partial
> >> solution. I didn't find any reference
> >> which describes how to implement the complete solution. I am not even
> sure
> >> whether that's possible.
> >> Complete solution is a finite number of parametrized tuples, (x, y, z)
> using
> >> two parameters.
> >> Currently, diophantine() returns only one parametrized tuple.
> >>
> >> SPECIAL NOTES
> >> =============
> >>
> >> * Both diophantine() and diop_solve() return a set of tuples. Values in
> the
> >> output tuples are arranged in
> >> the sorted order of variables used. For example,
> >>
> >>> In [5]: diop_solve(x**2 + 2*y**2 - 3)
> >>> Out[5]: set([(-1, -1), (-1, 1), (1, -1), (1, 1)])
> >>
> >>
> >> Output tuples in the set are in the order (x, y), i.e.  (-1, 1)
> represent
> >> the solution x = -1 and y = 1.
> >>
> >> * diop_ternary_quadratic_normal() and diop_ternary_quadratic() assume
> that
> >> inputs are in the exact
> >> form as they are supposed to be, i.e they will contain exactly three
> >> variables. If by any chance, internal
> >> routines call these two functions with less than three variables, it
> will
> >> cause an error. This can be avoided
> >> by using diophantine() instead of diop_solve().
> >>
> >>
> >> THINGS TO BE FINALIZED
> >> ====================
> >>
> >> * When we know that (x, y), (-x, y), (-x, -y), (x, -y) are all
> solutions for
> >> a given equation should we return
> >> all the four solutions or just one? ( For example, x**2 - 2*y**2 - 3 =
> 0)
> >
> > I would return all four. It is easy to filter out the ones you don't
> > want, but not returning all the solutions looks like a bug.
> >
> > Aaron Meurer
> >
> >>
> >> * I have limited the number of solutions found for the general Pell
> equation
> >> and for the equations which
> >> can be converted to Pell equation. Finding all the solutions take a lot
> of
> >> time.
> >>
> >> * Correct way to represent parametrized solutions, as Aaron has
> mentioned in
> >> above mail.
> >>
> >>
> >> I am currently working on simplifying the results returned by
> diophantine()
> >> when the input equation can be
> >> reduced to a Pell equation. Since the results are parametrized
> solutions and
> >> involves square root and powers
> >> of the parameter used, these become complex very quickly.
> >>
> >> Regards,
> >> Thilina
> >>
> >>
> >>
> >> On Fri, Aug 30, 2013 at 5:48 AM, Aaron Meurer <[email protected]>
> wrote:
> >>>
> >>> That's great. One idea of something you can do next is to start
> >>> looking at how to integrate this with solve(), so that something like
> >>>
> >>> n, m = symbols('n m', integer=True)
> >>>
> >>> solve(3*n - 4*m - 1, [n, m])
> >>>
> >>> works. This is more of a design issue than an implementation one. We
> >>> need to figure out the right way to return parameterized solutions
> >>> from solve().
> >>>
> >>> Aaron Meurer
> >>>
> >>>
> >>> On Wed, Aug 28, 2013 at 1:44 AM, Thilina Rathnayake
> >>> <[email protected]> wrote:
> >>> > Hi Ondrej,
> >>> >
> >>> > I finished the last two deliverables(generalized pythagorean equation
> >>> > and
> >>> > general sum of squares)
> >>> > of my project over the weekend and I think now the project is almost
> >>> > complete. But before pulling
> >>> > those new code we have to merge the current PR first. Below is it's
> link
> >>> >
> >>> > https://github.com/sympy/sympy/pull/2303
> >>> >
> >>> > To merge this PR we have to merge pernici's PR. Below is the link of
> his
> >>> > PR.
> >>> >
> >>> > https://github.com/sympy/sympy/pull/2307
> >>> >
> >>> > I reviewed it during the last week and since he has made some
> >>> > improvements,
> >>> > I am going through it
> >>> > once again. I don't think it will take a long time. We can merge it
> >>> > afterwards.
> >>> >
> >>> > Meanwhile I am looking for new types of equations to add to the
> >>> > Diophantine
> >>> > module and possible
> >>> > improvements in the algorithms used. I found a good book which
> contains
> >>> > various types of equations.
> >>> >
> >>> >
> >>> >
> http://books.google.lk/books/about/Diophantine_equations.html?id=QugvF7xfE-oC&redir_esc=y
> >>> >
> >>> > But it contains only a general introduction for each type of
> equation. I
> >>> > have to find another resource to
> >>> > look for the algorithms.
> >>> >
> >>> > Regards,
> >>> > Thilina
> >>
> >>
>

-- 
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sympy.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to