GSoC 2018 - Week 9 - Starting up with Lambert equations
13 Jul 2018At the start of the week I worked on the leftovers of week 8:
- added
log_singularities()
that will help in determining logarithmic singularities, - improved documentation of all helpers as suggested by Amit to maintain consistency
Status of the PR’s:
PR #14736 is ready to be merged.
PR #14792 is being worked on. Major tasks has been completed, just review and refining has to be done.
Apart from this I started working on the way Lambert type equations can be solved through _transolve()
. I looked into _tsolve's
way of handling such equations.
For solving Lambert type equations _tsolve()
largely depends on bivariate.py
. It takes help of the different utility functions implemented there.
Of them two important are _solve_lambert()
and bivariate_type()
. These two helpers help in getting the equations evaluated.
Equations that can be written in the standard form as: A + B*x + C*log(D + E*x) = 0
has the solutions in terms of Lambert
function as:
D/E + C*B*W(t) with (B/C*E)*exp((BD - AE)/CE)
This is what _solve_lambert()
determines and accordingly returns the solutions, otherwise returns a NotImplementedError
If _solve_lambert()
is unable to handle bivariate_type()
is tried. This function first tries to identify the type of composite bivariate and then substitutes Dummy
in place of them. For eq: (x + y)**2 - 3
would become _u**2 - 3
where _u
is the dummy variable. The idea is that solving the latter equation for u
and then equating the solutions to the former equation is equivalent for solving the original one.
While implementing in _transolve
this philosophy needs to be applied. As of now I have looked into different tests on how they behave. I will start implementing it next.
Next week’s plan:
-
Finishing with the logsolver
-
Implementing lambert solver.