mirror of
https://github.com/mfillpot/mathomatic.git
synced 2026-01-09 04:59:37 +00:00
71 lines
4.2 KiB
Plaintext
71 lines
4.2 KiB
Plaintext
Ideas to code in Mathomatic
|
|
---------------------------
|
|
|
|
A GPL compatible, free software GUI needs to be written for Mathomatic.
|
|
Anyone interested in writing one should contact me at some point, so it can
|
|
be included in the Mathomatic distribution.
|
|
|
|
Implement logarithms as a binary operator mapped from the log(x, y) or ln(x)
|
|
functions, using m4. The rules for logarithms can be slowly added later. This
|
|
is a large project that only George Gesslein II knows how to do properly
|
|
(well maybe, because Mathomatic is like a highly efficient CAS written in
|
|
assembly language, but it is written in C for portability). This easy idea
|
|
implements each logarithm as a binary operator like in the J programming
|
|
language, then uses m4 as a macro preprocessor to map the log(x, y) and ln(x)
|
|
functions to it. I am currently looking for ideas from anyone on which ASCII
|
|
character or combination of characters should best represent the logarithm
|
|
function. My best idea so far is (a\/b) for logarithm base "b" of "a". m4
|
|
would allow entry of ln(a) and log(a, b) after the log operator is
|
|
implemented. ln(a) would translate to ((a)\/e). The default display in
|
|
Mathomatic is always an operator display, but certain listing and exporting
|
|
commands will be able to display logarithms as log functions.
|
|
|
|
Simplify nested radicals like ((9 + 4*(2^.5))^.5) to (1 + 2*(2^.5)). This may
|
|
be difficult, I have an idea how this is generally done, just need some free
|
|
thinking and implementation time. Slow trial and error algorithms are not
|
|
acceptable for this. The routine should temporarily square the result to make
|
|
sure it is correct, or temporarily numerically approximate the original and
|
|
the result and compare the resulting constants, before acceptance. Here is an
|
|
article on one way to simplify nested radicals:
|
|
"http://www.almaden.ibm.com/cs/people/fagin/symb85.pdf". Also, see Landau's
|
|
algorithm (http://en.wikipedia.org/wiki/Landau%27s_algorithm).
|
|
|
|
Use the GNU Scientific Library (GSL) to automatically numerically solve any
|
|
degree numeric polynomial equation, like "examples/roots.c" does, when
|
|
symbolic solving fails. Unfortunately, the GSL results are sometimes
|
|
inaccurate, and it adds a library dependency, so I may not do this. Instead,
|
|
the general cubic formula in "tests/cubic.in" could be hard-coded into the
|
|
Mathomatic poly_solve() function, so any cubic equation could be
|
|
automatically solved. I just haven't figured out how Mathomatic is going to
|
|
easily handle 3 solutions per equation space. Solving quartic equations with
|
|
"tests/quartic.in" is not recommended, due to the large, accumulated
|
|
round-off error of floating point when approximating large formulas, and the
|
|
many cases that quartic formula causes division by zero and fails, though
|
|
handling an even number of solutions is very easy in Mathomatic.
|
|
|
|
Implement complex number factorials, when an accurate, floating point,
|
|
complex number gamma calculating function is found. The GSL does this.
|
|
|
|
Make polynomial gcd calculation partially recursive. This is difficult, as
|
|
the expression storage areas are currently static globals. If successful,
|
|
this will make polynomial gcd calculation multivariate, so it will succeed
|
|
with larger expressions with many variables. There is no need for total
|
|
recursion, because it would never be used anyways, with the amount of
|
|
floating point round-off error that occurs in Mathomatic. Every inexact
|
|
floating point mathematical operation has a small round-off error that adds
|
|
up with many operations, making polynomial gcd determination fail with large
|
|
polynomials, anyways.
|
|
|
|
Add a "polynomial" command that tells what type and degree polynomial the
|
|
current expression is, if it is a polynomial in the optional specified
|
|
variable. Study Maxima's facsum() function, it does a related thing.
|
|
|
|
matho and rmath don't work perfectly; because they use m4 as a front end,
|
|
there are some user interface problems. I probably should write some C code
|
|
to do the string macro expansion as part of the main mathomatic program. If I
|
|
am feeling better I will do that and add logarithm function support.
|
|
|
|
|
|
-----------------------------------------------------------------
|
|
This file was written by George Gesslein II of www.mathomatic.org
|