This article has multiple issues. Please help improve it or discuss these issues on the talk page . (Learn how and when to remove these template messages)
|
Original author(s) | George Gesslein II |
---|---|
Developer(s) | George Gesslein II |
Initial release | 1987[1] |
Final release | 16.0.5 / 21 October 2012 |
Written in | C |
Engine | GitHub |
Operating system | Cross-platform, Unix-like |
Platform | Any computer architecture |
Service name | Mathomatic |
Available in | English |
Type | Computer algebra/math system |
License | GNU Lesser General Public License version 2.1 |
Website | github |
Mathomatic [2] is a free, portable, general-purpose computer algebra system (CAS) that can symbolically solve, simplify, combine and compare algebraic equations, and can perform complex number, modular, and polynomial arithmetic, along with standard arithmetic. It can perform symbolic calculus (derivative, extrema, Taylor series, and polynomial integration and Laplace transforms), numerical integration, and can handle all elementary algebra except logarithms. Trigonometric functions can be entered and manipulated using complex exponentials, with the GNU m4 preprocessor. Not currently implemented are general functions such as f(x), arbitrary-precision and interval arithmetic, as well as matrices.
Mathomatic is capable of solving, differentiating, simplifying, calculating, and visualizing elementary algebra. [3] It also can perform summations, products, and automated display of calculations of any length by plugging sequential or test values into any formula, then approximating and simplifying before display.
Intermediate results (showing the work) may be displayed by previously typing "set debug 1" (see the session example); this works for solving and almost every command in Mathomatic. "set debug 2" shows more details about the work done.
The software does not include a GUI except with the Mathomatic trademark authorized, versions for smartphones and tablets running iOS [4] or Android. [5] The Mathomatic software, available on the official Mathomatic website, [6] is authorized for use in any other type of software, due to its permissive free software license (GNU LGPL). It is available as a free software library, and as a free console mode application that uses a color command-line interface with pretty-print output that runs in a terminal emulator under any operating system. [3] The console interface is simple and requires learning the basic algebra notation to start. All input and output is line-at-a-time ASCII text. By default, input is standard input and output is standard output. Mathomatic is typically compiled with editline or GNU readline for easier input.
There is no programming capability; the interpreter works like an algebraic calculator. Expressions and equations are entered in standard algebraic infix notation. Operations are performed on them by entering simple English commands.
Because all numeric arithmetic is double precision floating point, and round-off error is not tracked, Mathomatic is not suitable for applications requiring high precision, such as astronomical calculations. It is useful for symbolic-numeric calculations of about 14 decimal digits accuracy, although many results will be exact, if possible.
Mathomatic can be used as a floating point or integer arithmetic code generating tool, simplifying and converting equations into optimized assignment statements in the Python, C, and Java programming languages. The output can be made compatible with most other mathematics programs, except TeX and MathML format input/output are currently not available. The ASCII characters that are allowed in Mathomatic variable names is configurable, allowing TeX format variable names.
The Mathomatic source code can be compiled as a symbolic math library with an API, which can be linked to C compatible programs that need to use the Mathomatic symbolic math engine.
Solving and code generation example, where the work is shown:
1-> x = (a+1)*(b+2) #1: x = (a + 1)*(b + 2) 1-> set debug 1 Success. 1-> solve for b level 1: x = (a + 1)*(b + 2) Subtracting "(a + 1)*(b + 2)" from both sides of the equation: level 1: x - ((a + 1)*(b + 2)) = 0 Subtracting "x" from both sides of the equation: level 1: -1*(a + 1)*(b + 2) = -1*x Dividing both sides of the equation by "-1": level 1: (a + 1)*(b + 2) = x Dividing both sides of the equation by "a + 1": level 1: b + 2 = x/(a + 1) Subtracting "2" from both sides of the equation: level 1: b = (x/(a + 1)) - 2 Solve completed: level 1: b = (x/(a + 1)) - 2 Solve successful: x #1: b = ------- - 2 (a + 1) 1-> code C ; output C programming language code b = ((x/(a + 1.0)) - 2.0); 1-> variables C ; define the variables for the C compiler double x; double a; double b; 1->
Development of Mathomatic was started in the year 1986 by George Gesslein II, as an experiment in computerized mathematics. [7] It was originally written in Microsoft C for MS-DOS. Versions 1 and 2 were published by Dynacomp of Rochester, New York in 1987 [1] and 1988 [8] as a scientific software product for DOS. Afterwards it was released as shareware and then emailware, with a 2D equation graphing program. At the turn of the century, Mathomatic was ported to the GNU C Compiler under Linux and became free software. The graphing program was discontinued; 2D/3D graphing of equations is now accomplished with gnuplot.
The name "Mathomatic" is a portmanteau of "math" and "automatic", [3] and was inspired by the naming and automation of Rog-O-Matic , which was an early experiment in artificial intelligence.
Development has ceased as a result of the death of the author on February 24, 2013. [9]
Mathomatic is available for almost all platforms, including Microsoft Windows using MinGW. [10] It is available for Mac OS X, [11] [12] for iOS, [4] for Android, [5] and for the Nintendo DS under DSLinux and stand-alone. [13] Fedora Linux, [14] Slackware, [15] Debian, [16] Ubuntu, [17] Gentoo Linux, [18] and all of the main BSD Unix distributions [19] [20] [21] include Mathomatic as an automatically installable package. There is a port to JavaScript using Emscripten, allowing Mathomatic to run in a web browser. [22] The ports are all maintained by separate individuals.
Building from source requires a C compiler with the standard POSIX C libraries. If Mathomatic is compiled with the GCC C compiler or the Tiny C Compiler for a Unix-like operating system, no changes need to be made to the source code. Mathomatic uses no compiler-specific code, so it will usually compile easily with any C compiler. Use of the Mathomatic Symbolic Math Library allows mixing programming languages and is operating system independent. [23]
Mathomatic can be ported to any computer with at least 1 megabyte of free RAM. The Mathomatic standard distribution [6] memory requirement defaults to a maximum of 400 megabytes, depending on the size of the equation spaces and how many expressions have been entered. Equation spaces are fixed size arrays that are allocated as needed, the size of which is set during compilation or startup. Each algebraic expression or equation entered at the main prompt is stored in an equation space.
Mathomatic is written to do most symbolic manipulations with memory moves, like an assembly language program. This causes Mathomatic to crash when used with the new LLVM backend, which doesn't seem to like the standard C library function memmove(3). To use Mathomatic with a C compiler that uses an LLVM backend, disable all optimizations with "-O0" on the C compiler command line. Otherwise the regression tests will loop endlessly. This is most certainly an optimization bug in LLVM. To help those trying to debug this optimization error, Mathomatic will fail when LLVM optimizes the simplification of (32^.5) to 4*(2^.5), and the like, going into an endless loop every time.
Common Lisp (CL) is a dialect of the Lisp programming language, published in American National Standards Institute (ANSI) standard document ANSI INCITS 226-1994 (S2018). The Common Lisp HyperSpec, a hyperlinked HTML version, has been derived from the ANSI Common Lisp standard.
The GNU Compiler Collection (GCC) is a collection of compilers from the GNU Project that support various programming languages, hardware architectures and operating systems. The Free Software Foundation (FSF) distributes GCC as free software under the GNU General Public License. GCC is a key component of the GNU toolchain which is used for most projects related to GNU and the Linux kernel. With roughly 15 million lines of code in 2019, GCC is one of the largest free programs in existence. It has played an important role in the growth of free software, as both a tool and an example.
Wolfram Mathematica is a software system with built-in libraries for several areas of technical computing that allow machine learning, statistics, symbolic computation, data manipulation, network analysis, time series analysis, NLP, optimization, plotting functions and various types of data, implementation of algorithms, creation of user interfaces, and interfacing with programs written in other programming languages. It was conceived by Stephen Wolfram, and is developed by Wolfram Research of Champaign, Illinois. The Wolfram Language is the programming language used in Mathematica. Mathematica 1.0 was released on June 23, 1988 in Champaign, Illinois and Santa Clara, California.
In software development, Make is a command-line interface (CLI) software tool that performs actions ordered by configured dependencies as defined in a configuration file called a makefile. It is commonly used for build automation to build executable code from source code. But, not limited to building, Make can perform any operation available via the operating system shell.
The GNU toolchain is a broad collection of programming tools produced by the GNU Project. These tools form a toolchain used for developing software applications and operating systems.
Free Pascal Compiler (FPC) is a compiler for the closely related programming-language dialects Pascal and Object Pascal. It is free software released under the GNU General Public License, with exception clauses that allow static linking against its runtime libraries and packages for any purpose in combination with any other software license.
LLVM is a set of compiler and toolchain technologies that can be used to develop a frontend for any programming language and a backend for any instruction set architecture. LLVM is designed around a language-independent intermediate representation (IR) that serves as a portable, high-level assembly language that can be optimized with a variety of transformations over multiple passes. The name LLVM originally stood for Low Level Virtual Machine, though the project has expanded and the name is no longer officially an initialism.
Basic Linear Algebra Subprograms (BLAS) is a specification that prescribes a set of low-level routines for performing common linear algebra operations such as vector addition, scalar multiplication, dot products, linear combinations, and matrix multiplication. They are the de facto standard low-level routines for linear algebra libraries; the routines have bindings for both C and Fortran. Although the BLAS specification is general, BLAS implementations are often optimized for speed on a particular machine, so using them can bring substantial performance benefits. BLAS implementations will take advantage of special floating point hardware such as vector registers or SIMD instructions.
Mathematical software is software used to model, analyze or calculate numeric, symbolic or geometric data.
The GNU Data Language (GDL) is a free alternative to IDL, achieving full compatibility with IDL 7 and partial compatibility with IDL 8. Together with its library routines, GDL is developed to serve as a tool for data analysis and visualization in such disciplines as astronomy, geosciences, and medical imaging. GDL is licensed under the GPL. Other open-source numerical data analysis tools similar to GDL include Julia, Jupyter Notebook, GNU Octave, NCAR Command Language (NCL), Perl Data Language (PDL), R, Scilab, SciPy, and Yorick.
Code::Blocks is a free, open-source, cross-platform IDE that supports multiple compilers including GCC, Clang and Visual C++. It is developed in C++ using wxWidgets as the GUI toolkit. Using a plugin architecture, its capabilities and features are defined by the provided plugins. Currently, Code::Blocks is oriented towards C, C++, and Fortran. It has a custom build system and optional Make support.
In C and related programming languages, long double
refers to a floating-point data type that is often more precise than double precision though the language standard only requires it to be at least as precise as double
. As with C's other floating-point types, it may not necessarily map to an IEEE format.
The GNU Binary Utilities, or binutils, is a collection of programming tools maintained by the GNU Project for working with executable code including assembly, linking and many other development operations.
SymPy is an open-source Python library for symbolic computation. It provides computer algebra capabilities either as a standalone application, as a library to other applications, or live on the web as SymPy Live or SymPy Gamma. SymPy is simple to install and to inspect because it is written entirely in Python with few dependencies. This ease of access combined with a simple and extensible code base in a well known language make SymPy a computer algebra system with a relatively low barrier to entry.
Clang is a compiler front end for the C, C++, Objective-C, and Objective-C++ programming languages, as well as the OpenMP, OpenCL, RenderScript, CUDA, SYCL, and HIP frameworks. It acts as a drop-in replacement for the GNU Compiler Collection (GCC), supporting most of its compilation flags and unofficial language extensions. It includes a static analyzer, and several code analysis tools.
Christopher Arthur Lattner is an American computer scientist and creator of LLVM, the Clang compiler, the Swift programming language and the MLIR compiler infrastructure.
Lis is a scalable parallel software library to solve discretized linear equations and eigenvalue problems that mainly arise from the numerical solution of partial differential equations using iterative methods. Although it is designed for parallel computers, the library can be used without being conscious of parallel processing.
Qt Creator is a cross-platform C++, JavaScript, Python and QML integrated development environment (IDE) which simplifies GUI application development. It is part of the SDK for the Qt GUI application development framework and uses the Qt API, which encapsulates host OS GUI function calls. It includes a visual debugger and an integrated WYSIWYG GUI layout and forms designer. The editor has features such as syntax highlighting and autocompletion. Qt Creator uses the C++ compiler from the GNU Compiler Collection on Linux. On Windows it can use MinGW or MSVC with the default install and can also use Microsoft Console Debugger when compiled from source code. Clang is also supported.
The LLDB Debugger (LLDB) is the debugger component of the LLVM project. It is built as a set of reusable components which extensively use existing libraries from LLVM, such as the Clang expression parser and LLVM disassembler. LLDB is free and open-source software under the University of Illinois/NCSA Open Source License, a BSD-style permissive software license. Since v9.0.0, it was relicensed to the Apache License 2.0 with LLVM Exceptions.