On Thu, Aug 29, 2013 at 12:42 AM, Thilina Rathnayake
<[email protected]> wrote:
> Hi Onderj,
>
> I hope to work on improving documentation during this week. I added some
> docstrings
> to the Sphinx but they need to be improved.

Great plan, thanks.

>
> I tried to find the bug with 7 and 9. For 7, I did this,
>
> In [3]: find_DN(1+2*x+2*x**2+2*y+x*y-2*y**2)
> Out[3]: (17, -1768)
>
> So the original equation can be transformed to the form x**2 - Dy**2 = N
> with D = 17 and N = -1768
> We can try to solve this equation by using diop_DN().
>
> In [4]: diop_DN(17, -1789)
> Out[4]: [(298, 73), (-94, -25)]
>
> So, internally, diop_DN() return results, I think the problem arises when we
> try to recover
> the solutions for original equation. I'll give a try to fix this.

Excellent, great job. Please ping me if you either get stuck or
once the PR is up.

>
> Mathematica provides lots of results because, they split a given solution to
> two other solutions.
> Suppose we have (5 + sqrt(3))**n - (5 - sqrt(3))**n, they try to simplify
> this considering the cases
> where n is even and odd. After that they add the two simplified solutions to
> the list. Since the
> solutions returned by the diop_solve() can be complex sometimes, I think we
> will have to go for
> this approach too.

I see. Very good. I merged Mario's PR, so let's get your #2303 in.

Once everything is in, I'll test your code some more and see how it works.
In particular I'll test that we can do everything from
http://reference.wolfram.com/mathematica/tutorial/DiophantineReduce.html.
I.e. that we get equivalent results for things that we support.

I think we should expose the highest level API to the sympy module itself.
Should we expose the diop_solve() function or something else?

Ondrej

>
> I'll try to fix these issues asap.
>
> Regards,
> Thilina
>
>
>
> On Thu, Aug 29, 2013 at 12:21 AM, Ondřej Čertík <[email protected]>
> wrote:
>>
>> Hi Thilina,
>>
>> 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
>>
>> Excellent, great work!
>>
>> > 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
>>
>> Ok, let's get this one in first.
>>
>> >
>> > 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.
>>
>> Ok.
>>
>> >
>> > 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.
>>
>> We should also write some Sphinx documentation documenting the module,
>> types of equations it can solve
>> and put there some examples. So that when people want to learn about
>> diophantine equations in SymPy,
>> then can just read it.
>>
>> I just played with what is in the master:
>>
>> In [1]: from sympy.solvers.diophantine import diop_solve
>>
>> In [2]: diop_solve(4*x + 3*y -4*z + 5)
>> Out[2]: {x: 3⋅t + 4⋅z - 5, y: -4⋅t - 4⋅z + 5, z: z}
>>
>> In [3]: diop_solve(4*x**2 + 3*y + 5)
>> Out[3]:
>>    ⎛⎡⎛                2          ⎞  ⎛                2           ⎞⎤⎞
>> set⎝⎣⎝-3⋅t + 1, - 12⋅t  + 8⋅t - 3⎠, ⎝-3⋅t + 2, - 12⋅t  + 16⋅t - 7⎠⎦⎠
>>
>> In [4]: diop_solve(x**2 + y**2 - 9)
>> Out[4]: set([(-3, 0), (0, -3), (0, 3)])
>>
>> Looks great.
>>
>> So I tried to reproduce other people's work. I started with:
>>
>> https://www.wolframscience.com/reference/notes/1164b
>>
>> here is how to do the table at the beginning of the article:
>>
>> In [5]: diop_solve(1+x+x**2+y-x*y)
>> Out[5]: set([(-2, -1), (0, -1), (2, 7), (4, 7)])
>>
>> In [7]: diop_solve(1+2*x+2*x**2+2*y+x*y-2*y**2)
>> Out[7]: set([])
>>
>> In [8]: diop_solve(2+2*x+3*x**2+3*y+x*y-y**2)
>> Out[8]:
>>    ⎛⎡⎛                                          78⋅n
>>    ⎜⎢⎜⎛        ____       ⎞ ⎛        ____      ⎞       ⎛             ____⎞
>> ⎛
>>    ⎜⎢⎜⎝- 653⋅╲╱ 13  + 2353⎠⋅⎝- 180⋅╲╱ 13  + 649⎠       ⎝2353 + 653⋅╲╱ 13
>> ⎠⋅⎝18
>> set⎜⎢⎜────────────────────────────────────────────── +
>> ───────────────────────
>>    ⎝⎣⎝                     156
>> 156
>>
>>                78⋅n          ⎛
>> 78⋅n
>>     ____      ⎞         ____ ⎜  ⎛        ____       ⎞ ⎛        ____      ⎞
>> 0⋅╲╱ 13  + 649⎠       ╲╱ 13 ⋅⎝- ⎝- 653⋅╲╱ 13  + 2353⎠⋅⎝- 180⋅╲╱ 13  + 649⎠
>> ─────────────────── +
>> ────────────────────────────────────────────────────────
>>
>> 2028
>>
>>                                          78⋅n⎞                ⎛
>>    ⎛             ____⎞ ⎛      ____      ⎞    ⎟           ____ ⎜  ⎛
>> ____
>>  + ⎝2353 + 653⋅╲╱ 13 ⎠⋅⎝180⋅╲╱ 13  + 649⎠    ⎠   7     ╲╱ 13 ⋅⎝- ⎝- 653⋅╲╱
>> 13
>> ────────────────────────────────────────────── - ──, -
>> ───────────────────────
>>                                                  13
>>
>>                              78⋅n
>> 78⋅n
>>        ⎞ ⎛        ____      ⎞       ⎛             ____⎞ ⎛      ____      ⎞
>>  + 2353⎠⋅⎝- 180⋅╲╱ 13  + 649⎠     + ⎝2353 + 653⋅╲╱ 13 ⎠⋅⎝180⋅╲╱ 13  + 649⎠
>>
>> ──────────────────────────────────────────────────────────────────────────────
>>                           338
>>
>> ⎞     ⎞  ⎛                    78⋅n
>> ⎟     ⎟  ⎜⎛        ____      ⎞     ⎛        ____      ⎞   ⎛
>> ____⎞ ⎛
>> ⎠   16⎟  ⎜⎝- 180⋅╲╱ 13  + 649⎠    ⋅⎝- 146⋅╲╱ 13  + 520⎠   ⎝520 + 146⋅╲╱ 13
>> ⎠⋅⎝
>> ─ + ──⎟, ⎜───────────────────────────────────────────── +
>> ────────────────────
>>     13⎠  ⎝                     156
>> 1
>>
>>                  78⋅n          ⎛                      78⋅n
>>       ____      ⎞         ____ ⎜  ⎛        ____      ⎞     ⎛        ____
>> 180⋅╲╱ 13  + 649⎠       ╲╱ 13 ⋅⎝- ⎝- 180⋅╲╱ 13  + 649⎠    ⋅⎝- 146⋅╲╱ 13  +
>> 520
>> ───────────────────── +
>> ──────────────────────────────────────────────────────
>> 56
>> 2028
>>
>>                                          78⋅n⎞                ⎛
>> ⎞   ⎛            ____⎞ ⎛      ____      ⎞    ⎟           ____ ⎜  ⎛
>> ____
>> ⎠ + ⎝520 + 146⋅╲╱ 13 ⎠⋅⎝180⋅╲╱ 13  + 649⎠    ⎠   7     ╲╱ 13 ⋅⎝- ⎝- 180⋅╲╱
>> 13
>> ────────────────────────────────────────────── - ──, -
>> ───────────────────────
>>                                                  13
>>
>>        78⋅n
>> 78⋅n⎞
>>       ⎞     ⎛        ____      ⎞   ⎛            ____⎞ ⎛      ____      ⎞
>> ⎟
>>  + 649⎠    ⋅⎝- 146⋅╲╱ 13  + 520⎠ + ⎝520 + 146⋅╲╱ 13 ⎠⋅⎝180⋅╲╱ 13  + 649⎠
>> ⎠
>>
>> ─────────────────────────────────────────────────────────────────────────────
>>                          338
>>
>>     ⎞⎤⎞
>>     ⎟⎥⎟
>>   16⎟⎥⎟
>> + ──⎟⎥⎟
>>   13⎠⎦⎠
>>
>> In [9]: diop_solve(-4-x+4*x**2-y-3*x*y-4*y**2)
>> Out[9]: set([])
>>
>>
>>
>> [5] seems correct. [7] and [9] can't find any solution, but there
>> seems to be a solution, so that looks like a bug?
>>
>> Finally [8] seems pretty complicated. Do you know a way to get integer
>> solutions out of it?
>> I am attaching Mathematica's notebook for the last two equations. It
>> seems that SymPy's
>> result in [8] is correct --- though Mathemtica seems to provide more
>> solutions. We should check this.
>> SymPy's result in [9] is incorrect, as shown in the notebook.
>>
>>
>> Btw, there is plenty of additional examples for example here:
>>
>> http://reference.wolfram.com/mathematica/tutorial/DiophantineReduce.html
>>
>> I'll think about more applications and test your module more.
>>
>> Ondrej
>>
>> --
>> 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.
>
>
> --
> 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.

-- 
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