Yacas todo list
Future plans
This is a todo list of things I want to get out of the way before version
2.0.
emergencies
- Support for scientific notation in anumber.
- Multi-line epoc version.
- revisit MathPower: MathPower(0,0.5) locks up.
- revisit all analytic functions implemented in anumber, including
log, sin, arctan, etc.
- remove the final references to stdlib in the code.
- integrating x ln x goes into infinite recursion.
- Improved complex numbers. Ln(x) for x < 0 not working yet.
- put Nl() in a common place.
- test Apart for polys. This might have to be adjusted by adding
using the same mechanism used for the integer version.
- loading dll only once (defload mechanism), DllUse iso DllLoad
- the refcount 0xffff problem? Problem is actually the intermediate
expression swell.
- improved TraceExp
- multivariate polynomials, groebner bases.
- Ascii graph plotter.
- Ascii help when no browser is around
- Taylor on functions containing Abs/Sign can not be trusted.
- better error reporting.
- show function the error occurred in
- if the error was based on an argument type, show the argument
- If the error was on the number of arguments, specify number
expected and number received.
- To detect recursion problems, show the stack (ar the last few
items in the stack). Show it in a form
Function(internal)
Function(rule number)
Function
And show only the last few.
- Need to improve debugging facilities and tracing facilities. Would be
good to see how yacas is stepping through rule applications.
- Sin(Pi/6) etc.
- Allow TSimplify() on TSum()..-TSum()..
- Sin(Pi/5) = Sqrt(5-Sqrt(5))/Sqrt(8)
- Fix the Debian package to not require the new gmp.
- External function API, and plugin interface (dynamic link libraries).
-
Bugs to be fixed
- factorization of poly's can not do all polys yet. As a consequence:
- integrals over rational polys don't always work correctly.
- partial fraction expansion does not always return correct result (esp. the example in MCA).
- roots of a polynomial doesn't work yet.
- eigenvalues of a matrix doesn't work fully yet
- BUG: InverseTaylor not working correctly for Sin and Tan???
- BUG: complex^float.
- Mod(a,b) generates an error "Argument is not a list" if a or b or
both are undefined (I expected it to return unevaluated). Mod(-5, 7)
generates "-5" while it should mathematically speaking generate 2.
Mod(-4,-3) generates 1 but Mod(-4,-3) generates -1. I'm not sure what
the "correct" meaning of Mod is for negative moduli bases, but the
answer should in any case be non-negative. Mod(a,b) is defined as the
smallest non-negative number c such that a-c is divisible by b.
Engine functionality
These are the items specifying functionality that can not be implemented
from within Yacas, so have a rather high priority if the functionality
is needed.
- Define the Local,.. functions based on their Macro counterparts,
in the scripts.
- Remove the {} [] [[]] brackets support from the engine to the scripts.
- Faster numerical calculation, by caching the internal format,
and only converting back to ascii when needed.
- Add Karatsuba multiplication.
- also define a Head and Tail for arrays, and append/concat/
insert/delete/copy. This will ease swapping between lists
and arrays.
- Allow for type convertors in pattern matchers. For instance: IsUniVar,
should be combined with CanBeUni and NormalForm to get the correct
one back.
- A plugin interface for yacas, so it can be extended with external
libraries (fast numerical algorithms for instance).
- A RuleBaseDefined-like function that returns a list of defined
arities.
- HoldEvaluation(function-list)body that holds evaluation of
these functions.
Math high priority
This is the real meat, the functionality that should be in Yacas 2.0.
- render matrices and square roots nicely too, in PrettyForm.
- FindZeroes (polynoms and other functions)
- redivide some code ('newly')
- make suchthat more powerful, so it simplifies sin(x)=cos(x) to tan(x)=1 to x/Pi/4
- groebner bases
- see if using arrays for matrices speeds up things.
- Fix CanBeUni so that it deals correctly with 1/c
- Test script has been disregarded recently. Make a tests subdir,
install it also, with a lot of small files that can be loaded,
each implementing some tests.
- EquateCoefs equate coefficients in two polys, and return as list.
- /. as with mathematica, treat args as locals.
- allow solve to return a list usable in /.
- matrix^negative is inverse^positive
- BesselJ
- Get started on differential equations: first order
- try support for sparse objects (matrices, vectors, polynomials).
- try support for iterators.
- support for Atom("a"):=2;
Documentation
The documentation can be improved.
- Add more of a general overview:
- what is Yacas? How did it come into existence? Why did I write it? Who is it for?
Why no user interface? Why no plotting?
- document the algorithms used, and expand on all of the functions
currently implemented.
- separate manual chapter on tensors. (Serge? Is it going to change?). TSimplify and TExplicitSum, TD, X
- chapter on unix tools. yacas_client, Vi, GnuPlot
- document the source code.
- mention the use of lists for passing multiple arguments.
- document HoldArg in combination with <--
- ~/.yacas_history and ~/.yacasrc
- document the following commands:
- ExpressionDepth, SylvesterMatrix, PAdicExpandInternal, GetPrimeFactors,
Rem, Roots, EigenValues, Apart, Together, ExpandBrackets
- UnHoldable, GcdReduce, ApplyPure, Sign
DestructiveAppendList, PatternMatches, PatternCreate, RuleBaseDefined, RuleBaseArgList,
FindFunction, TemplateFunction, HoldArgNr, Lambda (in combination with Apply),
Primes, EvalFormula, StringMid, SetStringMid, OpLeftPrecedence, OpRightPrecedence, MapArgs, Substitute,
- quit, Version(), GarbageCollect()
- PatchLoad, V, GetExtraInfo, SetExtraInfo
- %, |, &, ^, if, else (else binds to the last if)
- Horner, DivPoly, RootsWithMultiples
- Document Deriv
- Add a 'History of Yacas' to the introduction.
- Explain what is destructive about the Destructive... routines,
why they are there, and when to use them.
- Do slightly more on pure functions, to show why they are useful. Show for example Select.
- Explain what Simplify currently does (internal algorithm).
- Vi: edit will try to edit a file, or if the argument passed is a
function, it will try to edit the file the function is defined in.
It will try to do so by invoking vi.
It finds the function by scanning the *.def files that have been
reported to the system.
To be really useful, you need to go to the directory containing
the original files, to edit the original files.
- Html... commands.
- FakeDb... functions.
- some blurb on the pattern matching/multivirtual functionality.
Engine internal improvements
These are nice to haves in the engine.
- An environment object. Within(environment)body should then
evaluate something within the environment. Together with
Apply this would allow for packages.
- engine-side apply "op" for speed.
- faster Pi() calculation
- LispCleanupStack: implement LocalLispString and LocalLispPtr.
- Clean up c++ code a little: Remove ALL TODO's and write javadoc-able-comments in the
source code.
- allow access to the rules database from within yacas, for showing
the rules to the user.
- optimize string concatenation.
- Try to find all the places that can use the CArrayGrower with the
iArrayOwnedExternally set.
- it seems I can still optimize InternalEval
- Finish arb. math stuff. (ASin, Acos, ATan)
Math nice to have
- Clean up TrigSimpCombine and Simplify in such a way as to make the
code reusable for other simplifications.
- QSort
- BinarySearch (array!)
- FourierTransform?
- LaplaceTransform?
- Singular Value Decomposition.
- FortranForm
- Resultants
- some DE algos.
- implement Diff(f(x),x)
- Try all the 131 Wester tests.