On Mon, 15 Feb 2021 at 21:01, Sayandip Halder <[email protected]> wrote:
>
> Hello! I hope to discuss the possible action plan for improving solvers and 
> solveset here. The GitHub wiki is old and needs to be updated.

Please do update it!

> The following are what I can think of right now. Also, I want to know what 
> people in the Sympy community think of this.
>
> 1. Solve Heaviside, Piecewise and floor functions correctly with solve()

It might make more sense to fix these things in solveset and then make
use of solveset in solve rather than trying to fix things in solve
itself.

> 2. Improve solving trigonometric functions with solveset()
> 4. Handler for union of ImageSets (PR 18489)

I've put the above two points together. It would be good to fix these.
I think it should be straight-forward to make some progress.

> 3. Add linsolve, nonlinsolve and solve_decomposition to solveset()

I have recently made significant performance improvements in linsolve.
It would be good to make more use of linsolve in the other solvers.
I'm not sure what you mean for the other points because solveset is
for univariate equations and the others are multivariate solvers.

I think that a major point that none of the current solvers can
address is the conditional existence of solutions:
    https://github.com/sympy/sympy/issues/16861
That's a significant problem for many users who want sympy to find
solutions to generically inconsistent systems e.g.:
    https://github.com/sympy/sympy/issues/19859

Another point is that many users just want numeric solutions and want
to be able to get them more conveniently e.g.:
    https://github.com/sympy/sympy/issues/19164

Another problem is how to make use of the outputs from solveset:
   https://github.com/sympy/sympy/issues/10006

The diophantine solvers are awkward to use but could easily be made better e.g.:
   https://github.com/sympy/sympy/issues/20682

We also need solvers for handling (at least linear) inequalities. The
current inequality solvers are severely lacking.

A major problem is that we have a mess of multiple solvers that have
overlapping functionality:

1. solve is actually the interface that most users want but the solve
function has an unreliable API and legacy behaviour
2. solveset is nice and formally correct but it's hard to use the
output and only for univariate equations
3. solvify tries to wrap solveset to give the output that solve does
but it doesn't cover as many cases
4. linsolve/nonlinsolve are reasonable but not feature complete and
also have an awkward return type

None of these functions really replaces any other so we just have a
range of different overlapping implementations and inconstent APIs. It
would be good to unify as much as possible of the implementations and
make the APIs consistent and more useful. Making the different
routines share a common clean codebase is needed but is a lot of work.

The most immediate thing that is needed is good documentation that
explains why there are different solvers and when you might want to
use each of them and discusses the caveats and limitations etc.

--
Oscar

-- 
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/sympy/CAHVvXxTi_LpaS9pMhRR7-Q32bU_NOxfYE0aocY_jwp4XjS1pFw%40mail.gmail.com.

Reply via email to