This is a command line C++ code which compiles and builds using gnu g++. It has scientific notation, scientific functions, complex integration including path integrals, and loops with tests. User defined functions are strings. A variable may simultaneously represent a scalar, an array, and a string. Arrays up to ten dimensions are allowed. Householder reduction is used for determinants, eigenvectors, and QR matrix factorization. Class Matrix and class Polynomial facilitate finding the characteristic polynomial. A hash table is used to do fast variable and function lookup (they are entries in the same table). Collisions are handled in the hash table by making each entry a linked list. Written as C++ classes using the STL libraries <complex> and <vector>. The Numerical Recipes routines zroots and laguer rewritten in C++ find the complex roots of a polynomial with complex coefficients. Exact quartic and cubic too. FFT that zero pads to 2^m 3^n, for dimensions up to 10.
Features
- C++ classes in namespace with overloaded operators. STL <complex> and <vector> libraries used.
- Arrays up to ten dimensions Definition by equation, resizing, mappings, matrices..
- Complex circular and hyperbolic trigonometric functions and complex inverses
- Bessel and modified Bessel functions with real arguments for integer orders of first and second kinds
- Variables can simultaneously be scalar, array, and string. Expressions can be variable strings
- Complex integrals including complex path integrals
- Hash table for variable and function names Linked lists handle collisions
- Numerical Recipes zroots rewritten in C++ using std::complex
- Complex eigenvectors and eigenvalues found using Householder reduction
- Inverse, determinant for complex square matrices found using Householder reduction
- Complex Householder reduction A=Q*B for unitary Q and upper triangular B
- fft and ifft for multi-dimensional complex arrays. Dimensions are automatically symmetrically zero padded to lowest bounding radix 2 and 3 size (2^m 3^n) for the general FFT. The Numerical Recipes FFT is also included for which zero-padding to lowest 2^N size is done for each dimension..
- User defined functions with dummy arguments may be defined. These are command sequences in a string.
- Builds with WSL2 Ubuntu and Debian g++, Raspbian Bullseye g++, Visual Studio 2022. See notes in formula.cpp
- Standard console text size can be made large with control key and center mouse wheel (WSL2) or Ctrl-Shift-Plus (Raspbian)
- Command sequences may be defined as strings and executed in a loop with test
- Contents for variable names may be displayed and arrays can be saved to files.
- Bash .sh build script for Ubuntu, Debian, Cygwin, Raspberry Pi
- Bash .sh build scripts for making Windows 11 .exe files using Windows 11 WSL2 Ubuntu and Debian, Cygwin, and MinGW
- Bash .sh build scripts for Unix that use gnuplot to generate plots
- Bash .sh build scripts for Unix that use static library libfits.a or dynamic link library libfits.so to save 2D images as FITS files with either 1 or 2 slices. Complex data requires 2 slices (polar or cartesian).
- 2D surface data can be saved as packed binary float or double .raw files, as float or double TIFF .tif files, or as .bmp files with many pre-defined color tables such as gray scale, rainbow, red-yellow-white and their inverses.. Saving as TIFF can only be done in Unix. It uses the raw2tiff command.
- When built in Unix with gnuplot installed, can display line plats and 3D surface plots
- When built in Unix, system commands can be executed within C++ Complex Calculator
- 2D surface data can be saved as float FITS file which includes coordinate axes info XLEFT, YTOP, DX, and DY. These saved FITS image files can be read back.