GSoC 2018 - Week 10 - Continuing with logarithmic solver
22 Jul 2018This week started with the merge of the PR #14736. Yehhhh!!!!!. So now solveset
will be able to solve a varied type of exponential equations. Next work is going on to build the logarithmic and lambert solver.
A lot of discussion has been taken place over the implementation of the logarithmic solver, there were mainly two points to consider:
- How the logarithmic equation gets evaluated, i.e., should we consider solutions that would make the log term negative.
Take for instance a logarithmic equation log(x - 3) + log(x + 3) = 0
, when solved the solutions would be -sqrt(10) and sqrt(10)
, but -sqrt(10)
make the log term negative. So the question was what should we do for such a scenario? Should we add a check to remove these solution or just accept. it.
As of now as suggested by Kalevi and Aaron we should focus on the liberal interpratation for evaluating equations: if an expression can be written in its equivalent form and makes sense then we can consider solutions of this equivalent form. Therefore both the above solutions are acceptable.
- How the identification of the logarithmic equations would take place.
The identification of logarithmic type is another question and is still yet to be agreed upon. At first the implementation was done by extracting each term of the expression and see if it has log
terms in it, this wasn’t the best of the method as we are trying to identify a large class of logarithmic equation while solving is done only for a subset of those equations (only those that can be reduced by logcombine
). So Amit and Chris stressed upon making the logarithmic identification for equations that its solver would solve. So as of now I have made changes accordingly.
Another problem that this PR is facing is of the infinite recursion. The equations that both exponential and logarithmic can’t solve but still their respective solver try to handle gets into infinite recursion. One way (though not appropriate) is to use flags
like in solve
, using this would remove the infinite recursion but is not the best way to handle, therefore I am looking into ways on how to get this fixed.
Apart from the work on log solver, I did some work on lambert solver- how the implementation would go, ran all the tests of solve
, differentiated the tests that _solve_lambert
could solve and that bivariate_type
would. I will be adding a PR for this in a day or so.
Next week goals:
-
Finish things with logarithmic solver
-
Sending a PR for lambert solver and try to finish its work as quickly as possible.