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.
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. 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'll try to fix these issues asap. Regards, Thilina On Thu, Aug 29, 2013 at 12:21 AM, Ondřej Čertík <ondrej.cer...@gmail.com>wrote: > Hi Thilina, > > 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 > > 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 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.