I agree, although it is usually a good idea to have a lot of
motivating examples to write a good framework. But in this case, the
existing solvers should be enough (with perhaps the exception of the
solvers that cannot exist currently because the current framework
doesn't allow them, like parameterized solutions).

Aaron Meurer

On Sat, Mar 15, 2014 at 11:53 PM, Matthew Rocklin <mrock...@gmail.com> wrote:
> I think that it is far more important to build a sane and extensible
> framework around solve than to focus on building new solvers.  My guess is
> that this also requires a different skill set.
>
>
> On Sat, Mar 15, 2014 at 11:54 AM, Aaron Meurer <asmeu...@gmail.com> wrote:
>>
>> I think it looks good so far. I like how you cleanly organized your
>> pull requests. That helps a lot.
>>
>> My comments:
>>
>> - I'm putting this up front because I think it's the most important
>> point. I feel that you are only addressing half of the issue at
>> https://github.com/sympy/sympy/issues/6659, namely the output format
>> of solve. What about the input API? Here is the parameter list for
>> solve() (I had to construct this manually from the docstring since the
>> code uses **kwargs):
>>
>> solve(f, *symbols, dict=False, set=False, exclude=(), check=True,
>> numerical=True, minimal=False, warning=False, simplify=True,
>> force=False, rational=True, manual=False, implicit=False,
>> minimal=False, quick=False)
>>
>> That's assuming there aren't any undocumented parameters.
>>
>> And don't get me started on the mess of linear equation solving
>> functions. We probably have a dozen functions that solve linear
>> equations or systems of linear equations (see some of the discussion
>> at https://github.com/sympy/sympy/pull/2580).
>>
>> I like that you're adding new stuff and cleaning up the output API,
>> but you should think about how to clean up the input API as well.
>>
>> - Your example
>>
>> In[]: soln = solve(sin(x)*sin(y), (x, y), input_set = Interval(0,
>> 4)*Interval(0, 4))
>>
>> is a bit confusing to me. The input_set argument gives a 2-dimensional
>> set, but how are you to know which axis is x and which is y?
>>
>> - You talk a lot about using sets, which I think is a good idea. But
>> you should think about how you can also use the assumptions. Maybe
>> there is a clean way that we can go back and forth between assumptions
>> and sets that requires minimal code duplication, and also allows each
>> to take advantage of the algorithms implemented in the other (by the
>> way, when I say assumptions, you should probably only worry about the
>> new assumptions, i.e., the stuff in the Q object).
>>
>> - Your section on singularities doesn't really make it clear why we
>> need the solvers to be improved to do this, namely, that we need to
>> know exactly when we have all the solutions to not get wrong results.
>>
>> - How will we handle that situation (finding all solutions)? What if
>> we can't say anything? Can we still represent objects in such a way
>> that it is not wrong (basically by somehow saying, "here are 'some' of
>> the solutions, but maybe not all of them", and ditto for anything that
>> uses solve, like singularities)? Maybe Piecewise is sufficient
>> somehow?
>>
>> - I'm glad to see you are working on improving the simplicity of the
>> results of solve, such as radical denesting. A potential
>> simplification routine uses minpoly() on an algebraic expression and
>> then uses solve to find a simpler solution, but this relies on the
>> results of solve being simple.  Do the radical denesting algorithms
>> work with symbolic entries as well?
>>
>> - Did you plan to add any new solvers? I think there are still quite a
>> few cases that we can't solve. Some higher degree irreducible
>> polynomials for instance (not all higher degree polynomials are
>> solvable by radicals but some are). There will also be a lot to
>> implement once we are able to even represent the solutions to
>> sin(x)=0.
>>
>> Aaron Meurer
>>
>> On Tue, Mar 11, 2014 at 8:40 AM, Harsh Gupta <gupta.hars...@gmail.com>
>> wrote:
>> > Hi, I have put my the first draft of the proposal on the sympy wiki.
>> >
>> >
>> > https://github.com/sympy/sympy/wiki/GSoC-2014-Application-Harsh-Gupta:-Solvers
>> >
>> > Please have a look, your suggestions will be valuable.
>> >
>> > On 22 February 2014 01:27, Harsh Gupta <gupta.hars...@gmail.com> wrote:
>> >> I realize that there is less than a month left for the application
>> >> deadline and it has already been a month since I posted this thread.
>> >> So, I need to come up with design details fast. I have written some
>> >> details about using sets as output for solvers in this PR
>> >> https://github.com/sympy/sympy/pull/2948/files. PR because I feel it
>> >> is better platform to facilitate this discussion than the mailing
>> >> list. Please have a look.
>> >>
>> >> On 16 February 2014 07:15, Jigar Mistry <jigarmistr...@gmail.com>
>> >> wrote:
>> >>> i am also interested in solvers module. how can i contribute to simpy
>> >>> using
>> >>> this solvers module.Plz help me....
>> >>>
>> >>>
>> >>> On Tuesday, 21 January 2014 16:25:13 UTC+5:30, Harsh Gupta wrote:
>> >>>>
>> >>>> Hi, I'm Harsh Gupta I will be GSOC applicant this year. I want to
>> >>>> discuss
>> >>>> the solvers idea given on the Idea's
>> >>>> page.https://github.com/sympy/sympy/wiki/GSoC-2014-Ideas#solvers
>> >>>>
>> >>>> Some of the aspect of the idea are discussed at
>> >>>>
>> >>>> https://groups.google.com/forum/?fromgroups=#!starred/sympy/8TM8cnuzkG8.
>> >>>>
>> >>>>
>> >>>> Aaron Meurer said:
>> >>>>
>> >>>>> I think with TransformationSet we can do quite a bit. That handles
>> >>>>> sets like {f(x) | x in A}. I think what is missing is the basic set
>> >>>>> builder {x | P(x)}, where P(x) is a boolean predicate.
>> >>>>
>> >>>>
>> >>>>
>> >>>> Matthew Rocklin said:
>> >>>>
>> >>>>>> > Real issue here - how to represent some solutions (e.g.
>> >>>>>> > sin(x)==0).
>> >>>>>
>> >>>>> In sets we would represent this with
>> >>>>> In [1]: imageset(k, pi*k, S.Integers)
>> >>>>> Out[1]: {π⋅k | k ∊ ℤ}
>> >>>>
>> >>>>
>> >>>> Implementing a general set builder will be very useful, we will need
>> >>>> to
>> >>>> define basic set operations like union
>> >>>> and intersection on them. We might use a syntax like `BuildSet(expr,
>> >>>> sym_in_inputset, cond)`
>> >>>>
>> >>>> In [1]: BuildSet(pi*k, (k, S.Integers), True).intersect(0, 10)
>> >>>> Out[1]: {pi, 2*pi, 3*pi}
>> >>>>
>> >>>>
>> >>>> Matthew Rocklin said:
>> >>>>
>> >>>>> It sounds like maybe solve should return a Set.
>> >>>>
>> >>>>
>> >>>> I think it will be necessary to return set if we want to represent
>> >>>> the
>> >>>> solution of expressions like `floor(x) - 5`.
>> >>>> See https://code.google.com/p/sympy/issues/detail?id=3975.
>> >>>> One problem I see with returning sets is that it can break a lot of
>> >>>> existing code.
>> >>>>
>> >>>>
>> >>>> As mentioned in the idea page we need to have a method to check if
>> >>>> solve
>> >>>> returns all the solutions. For polynomials or expressions which are
>> >>>> solved by converting to polynomials we can compare the degree of the
>> >>>> polynomial to the number of solutions returned.
>> >>>>
>> >>>> Other method can be verifying the number of the solutions by using
>> >>>> the
>> >>>> derivative of the function. Say we are given a *continuous* and
>> >>>> *differentiable*  function f(x) and it's derivative w.r.t x is g(x),
>> >>>> then if g(x) has n solutions then f(x) cannot have more than n + 1
>> >>>> solutions. So, if the solve returns n + 1 solutions for f(x) then we
>> >>>> are
>> >>>> guaranteed that we have found all the solutions.
>> >>>> For this we will need a discontinuity finder and we will also have to
>> >>>> make
>> >>>> sure that we have found all the solutions for g(x), i.e., the
>> >>>> derivative of
>> >>>> f(x), which can be done recursively or by using other methods.
>> >>>>
>> >>>> A third way can be using numerical solver. Say we use solve to find
>> >>>> the
>> >>>> solution of f(x) for some interval [a, b] then we can also run the
>> >>>> numerical
>> >>>> solver for f(x) on [a, b]
>> >>>> if the number of solutions by numerical solver and symbolic solve
>> >>>> matches
>> >>>> then we can be pretty sure that we have found out all the solutions
>> >>>> of f(x)
>> >>>> in [a, b].
>> >>>>
>> >>>> --
>> >>>> Harsh
>> >>>
>> >>> --
>> >>> 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.
>> >>
>> >>
>> >>
>> >> --
>> >> Harsh
>> >
>> >
>> >
>> > --
>> > Harsh
>> >
>> > --
>> > 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.
>> > To view this discussion on the web visit
>> > https://groups.google.com/d/msgid/sympy/CADN8iuohUoie3-eQHG5C_%2BEtKsfs%2BJ%2Bk2P-_DdLMPSBbLtXXDA%40mail.gmail.com.
>> > For more options, visit https://groups.google.com/d/optout.
>>
>> --
>> 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.
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/sympy/CAKgW%3D6KJVcvAhtX0iXPN%3DRy9DVrt642KmXLkAxLSxMDpNy5jiA%40mail.gmail.com.
>>
>> For more options, visit https://groups.google.com/d/optout.
>
>
> --
> 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.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/sympy/CAJ8oX-F3Q6psXPJLk3-ZnWJtq9F0z42fo5Dp4epBoX%2BUg9Zt7Q%40mail.gmail.com.
>
> For more options, visit https://groups.google.com/d/optout.

-- 
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.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sympy/CAKgW%3D6JHkW3s8xxs3TL%3DAAAnGXAHOr3GRQS%3Dw7%2BXL27ZZL%2BY3g%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to