Hi Ondrej,

I was a little busy with my university work within last two days, so I
couldn't reply
to this email. Sorry for that.

I noticed that you have created two issues, both of the equation types are
not implemented.
I was more focusing on the deliverables iin the proposal, so I didn't try
to solve those types.
But I still have 10 days so, I can solve them.

Also without just trying to represent a number as a sum of squares I am
trying to implement
this<http://reference.wolfram.com/mathematica/ref/PowersRepresentations.html>general
functionality.

As soon as I finish that I will start on the issues.
And I will update the wiki as Aaron suggested.

Regards,
Thilina.




On Wed, Sep 4, 2013 at 12:58 AM, Ondřej Čertík <ondrej.cer...@gmail.com>wrote:

> Hi,
>
> How difficult would be to implement a solver for systems of
> Diophantine equations?
> It looks like one would use the Groebner basis to reduce the problem
> to a sequence of simpler problems.
>
> I created issues for equation that can't be solved yet:
>
> http://code.google.com/p/sympy/issues/list?q=label:Diophantine
>
> otherwise I didn't find any bugs so far.
>
> Ondrej
>
> On Fri, Aug 30, 2013 at 11:29 AM, Thilina Rathnayake
> <thilina.r...@gmail.com> wrote:
> > 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 <asmeu...@gmail.com>
> 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 <asmeu...@gmail.com>
> wrote:
> >> > On Thu, Aug 29, 2013 at 7:19 PM, Thilina Rathnayake
> >> > <thilina.r...@gmail.com> 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 <asmeu...@gmail.com>
> >> >> 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
> >> >>> <thilina.r...@gmail.com> 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 sympy+unsubscr...@googlegroups.com.
> > To post to this group, send email to sympy@googlegroups.com.
> > Visit this group at http://groups.google.com/group/sympy.
> > For more options, visit https://groups.google.com/groups/opt_out.
>
> --
> 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 post to this group, send email to sympy@googlegroups.com.
> Visit this group at http://groups.google.com/group/sympy.
> For more options, visit https://groups.google.com/groups/opt_out.
>

-- 
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 post to this group, send email to sympy@googlegroups.com.
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