Trigonometric Solvers11 Jul 2017
This is the blog on progress for week-6. It revolves around solvers for trigonometric equations. The PR on polynomial solvers is merged in.
As I mentioned in my previous blog, I continued my work on solving simple trigonometric equations. I made a PR. See the commit messages for more details. Currently, this PR doesn’t pass the whole test suit. Specifically, the below case.
auto y = symbol("y"); eqn = sub(sin(add(x, y)), sin(x)); soln = solve(eqn, y);
It currently returns a ConditionSet(means it is unable to find any solution). The reason for this traces to problem in
expand(exp(I*(x + y))) stays as
exp(I*(x+y)). It should be returning
exp(I*x)*exp(I*y). This is needed because
subs are not robust enough to handle inputs like
exp(x + I*y)->subs(exp(I*y) = z). Even SymPy subs are not robust enough(see example below).
>>> a=sin(x+y).rewrite('exp') >>> a.subs(exp(I*y),z) ⎛ ⅈ⋅(-x - y) ⅈ⋅(x + y)⎞ -ⅈ⋅⎝- ℯ + ℯ ⎠ ──────────────────────────────── 2 >>> a=expand(sin(x+y).rewrite('exp')) >>> a.subs(exp(I*y),z) ⅈ⋅x -ⅈ⋅x ⅈ⋅z⋅ℯ ⅈ⋅ℯ - ──────── + ─────── 2 2⋅z
Apart from this, I fixed a bug in
Next immediate goal is to implement trigonometric simplification using
fu and integrate it with current
trig_solve. I will add as many rules as possible. Hopefully, we would be able to solve not so simple equations as well after it is successfully integrated.
You can track my progress on this at
That’s it for now. See you next week. Until then, Goodbye !