Sophie

Sophie

distrib > Mandriva > 8.2 > i586 > media > contrib > by-pkgid > 13a1eaa187f3c123bd6a194957071b38 > files > 33

yacas-1.0.47rev7-1mdk.i586.rpm


<html>
<HEAD>
<title>Yacas future plans</title>
<h1>Yacas todo list</h1>
</head>
<body BGCOLOR=WHITE>

<FONT face="Helvetica" size="3">

Current:
<ul>
  <li> Test code, documentation for multivariate polys.
  <li> Solve broken, and not as powerful as if can be.
  <li> Clean up this file: prioritize.
  <li> Document some long-standing undocumented functions.
</ul>

<H1>Future plans</h1>

This is a todo list of things I want to get out of the way before version
2.0.

<h1>emergencies</h1>
<ul>
  <li> Support for scientific notation in anumber.
  <li> Multi-line epoc version.
  <li> revisit MathPower: MathPower(0,0.5) locks up.
  <li> revisit all analytic functions implemented in anumber, including
       log, sin, arctan, etc.
  <li> remove the final references to stdlib in the code.
  <li> integrating x ln x goes into infinite recursion.
  <li> Improved complex numbers. Ln(x) for x &lt 0 not working yet.
  <li> put Nl() in a common place.
  <li> test Apart for polys. This might have to be adjusted by adding
       using the same mechanism used for the integer version.
  <li> loading dll only once (defload mechanism), DllUse iso DllLoad
  <li> the refcount 0xffff problem? Problem is actually the intermediate
       expression swell.
  <li> improved TraceExp
  <li> multivariate polynomials, groebner bases.
  <li> Ascii graph plotter.
  <li> Ascii help when no browser is around
  <li> Taylor on functions containing Abs/Sign can not be trusted.
</ul>


<ul>
  <li> better error reporting.
    <ul>
      <li> show function the error occurred in
      <li> if the error was based on an argument type, show the argument
      <li> If the error was on the number of arguments, specify number
           expected and number received.
      <li> 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.
    </ul>
  <li> Need to improve debugging facilities and tracing facilities. Would be
       good to see how yacas is stepping through rule applications.
  <li> Sin(Pi/6) etc.
  <li> Allow TSimplify() on TSum()..-TSum()..
  <li> Sin(Pi/5) = Sqrt(5-Sqrt(5))/Sqrt(8)
  <li> Fix the Debian package to not require the new gmp.
  <li> External function API, and plugin interface (dynamic link libraries).
<li>


<H2>Bugs to be fixed</H2>
<UL>
  <li> factorization of poly's can not do all polys yet. As a consequence:
	  <UL> 
	       	 <li> integrals over rational polys don't always work correctly. 
         <li> partial fraction expansion does not always return correct result (esp. the example in MCA).
		 <li> roots of a polynomial doesn't work yet.
		 <li> eigenvalues of a matrix doesn't work fully yet
      </UL>
  <li> BUG: InverseTaylor not working correctly for Sin and Tan???
  <li> BUG: complex^float.

   <li> 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(-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.


</UL>


<H2>Engine functionality</H2>
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.

<UL>
  <li> Define the Local,.. functions based on their Macro counterparts,
       in the scripts.
  <li> Remove the {} [] [[]] brackets support from the engine to the scripts.
  <li> Faster numerical calculation, by caching the internal format,
       and only converting back to ascii when needed.
  <LI> Add Karatsuba multiplication.
  <LI> also define a Head and Tail for arrays, and append/concat/
       insert/delete/copy. This will ease swapping between lists
       and arrays.
  <LI> Allow for type convertors in pattern matchers. For instance: IsUniVar, 
       should be combined with CanBeUni and NormalForm to get the correct
	   one back.
  <LI> A plugin interface for yacas, so it can be extended with external
       libraries (fast numerical algorithms for instance).
  <li> A RuleBaseDefined-like function that returns a list of defined
       arities.
  <li> HoldEvaluation(function-list)body that holds evaluation of
       these functions.
</UL>

<H2>Math high priority</H2>
This is the real meat, the functionality that should be in Yacas 2.0.

<ul>
	<li> render matrices and square roots nicely too, in PrettyForm.
	<li> FindZeroes (polynoms and other functions)
	<li> redivide some code ('newly')
	<li> make suchthat more powerful, so it simplifies sin(x)=cos(x) to tan(x)=1 to x/Pi/4
	<li> groebner bases
	<li> see if using arrays for matrices speeds up things.
	<li> Fix CanBeUni so that it deals correctly with 1/c
	<li> 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.
	<li> EquateCoefs equate coefficients in two polys, and return as list.
	<li> /. as with mathematica, treat args as locals.
	<li> allow solve to return a list usable in /.
	<li> matrix^negative is inverse^positive
	<li> BesselJ
	<li> Get started on differential equations: first order
	<li> try support for sparse objects (matrices, vectors, polynomials).
	<li> try support for iterators.
        <li> support for Atom("a"):=2;
</ul>



<H2>Documentation</H2>

The documentation can be improved. 

<UL>
<li> Add more of a general overview:
  <ul>
  
    <li> 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?
</ul>
<li> document the algorithms used, and expand on all of the functions
     currently implemented.
<li> separate manual chapter on tensors. (Serge? Is it going to change?). TSimplify and TExplicitSum, TD, X
<li> chapter on unix tools. yacas_client, Vi, GnuPlot
<li> document the source code.
<li> mention  the use of lists for passing multiple arguments.
<li> document HoldArg in combination with <--
<li> ~/.yacas_history and ~/.yacasrc

<li> document the following commands:
  <UL>
  <li> ExpressionDepth, SylvesterMatrix, PAdicExpandInternal, GetPrimeFactors, 
          Rem, Roots, Apart, Together
  <li> UnHoldable, GcdReduce, ApplyPure
	DestructiveAppendList, PatternMatches, PatternCreate, RuleBaseDefined, RuleBaseArgList,
	FindFunction, TemplateFunction, HoldArgNr, Lambda (in combination with Apply), 
	Primes, OpLeftPrecedence, OpRightPrecedence, MapArgs, Substitute, 
  <li> quit, Version(), GarbageCollect()
  <li>   V, GetExtraInfo, SetExtraInfo
  <li> %, |, &, ^, if, else (else binds to the last if)
  <li> DivPoly, RootsWithMultiples,
  <li> OdeSolve
  <li> Deriv, Berlekamp, ExtendedEuclidean, ExtendedEuclideanMonic
  <li> IsVariable
  <li> the fact that VarList can also be called with a second argument, a
       filter predicate.
  <li> Extended predicates in the pattern matcher (needs to be explained).
  <li> CTokenizer(), DefaultTokenizer()

  <li> II, ReII, ImII, IsComplexII
  <li> XmlTokenizer, XmlExplodeTag
  <li> BSearch, FindIsq Search for a zero in a monotonously
       growing function. BSearch returns -1 if not found,
       FindIsq returns the insertion point.
  <li>   MultiDivide, MultiGcd, Groebner



  </UL>
  <li> Add a 'History of Yacas' to the introduction.
  <li> Explain what is destructive about the Destructive... routines,
    why they are there, and when to use them.
  <li> Do slightly more on pure functions, to show why they are useful. Show for example Select.
  <li> Explain what Simplify currently does (internal algorithm).

  <li> 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.

  <li> Html... commands.
  <li> FakeDb... functions.
  <li> some blurb on the pattern matching/multivirtual functionality.
</UL>

<H2>Engine internal improvements</H2>

These are nice to haves in the engine.

<UL>
  <li> An environment object. Within(environment)body should then
     evaluate something within the environment. Together with
     Apply this would allow for packages.
  <li> engine-side apply "op" for speed.
<li> faster Pi() calculation
<li>  LispCleanupStack: implement LocalLispString and LocalLispPtr.
<li>  Clean up c++ code a little: Remove ALL TODO's and write javadoc-able-comments in the
      source code.
<li> allow access to the rules database from within yacas, for showing
  the rules to the user.
<li> optimize string concatenation.
<li> Try to find all the places that can use the CArrayGrower with the
  iArrayOwnedExternally set.
<li> it seems I can still optimize InternalEval
<li> Finish arb. math stuff. (ASin, Acos, ATan)
</UL>


<H2>Math nice to have</H2>
<ul>

<li> Clean up TrigSimpCombine and Simplify in such a way as to make the
      code reusable for other simplifications.
<li> QSort
<li> BinarySearch (array!)
<li> FourierTransform?
<li> LaplaceTransform?
<li> Singular Value Decomposition.

<li> FortranForm
<li> Resultants
<li> some DE algos.
<li> implement Diff(f(x),x)
<li> Try all the 131 Wester tests.

</ul>

</FONT>
</BODY>
</HTML>





 6657552 n.