ortho documentation#
A python package to generate a set of orthogonal functions.
Overview#
This package generates a set of orthonormal functions, called \(\phi_i^{\perp}\), based on the set of non-orthonormal functions \(\phi_i\) defined by the inverse-monomials
The orthonormalized functions \(\phi_i^{\perp}\) are the linear combination of the functions \(\phi_i\) by
The functions \(\phi_i^{\perp}\) are orthonormal in the interval \(t \in [0,L]\) with respect to the weight function \(w(t) = t^{-1}\). That is,
where \(\delta_{ij}\) is the Kronecker delta function. The orthogonal functions are generated by Gram-Schmidt orthogonalization process. This script produces the symbolic functions using Sympy, a Python computer algebraic package. An application of these orthogonal functions can be found in [1].
Build and Test Status#
Platform |
Arch |
Python Version |
Continuous Integration |
|||
---|---|---|---|---|---|---|
3.9 |
3.10 |
3.11 |
3.12 |
|||
Linux |
X86-64 |
✔ |
✔ |
✔ |
✔ |
|
AARCH-64 |
✔ |
✔ |
✔ |
✔ |
||
macOS |
X86-64 |
✔ |
✔ |
✔ |
✔ |
|
ARM-64 |
✔ |
✔ |
✔ |
✔ |
||
Windows |
X86-64 |
✔ |
✔ |
✔ |
✔ |
|
ARM-64 |
✔ |
✔ |
✔ |
✔ |
Install#
Install using either of the following three methods.
1. Install from PyPi#
Install using the package available on PyPi by
pip install ortho
2. Install from Anaconda Cloud#
Install using Anaconda cloud by
conda install -c s-ameli ortho
3. Install from Source Code#
Install directly from the source code by
git clone https://github.com/ameli/ortho.git
cd ortho
pip install .
Testing#
To test the package, download the source code and use one of the following methods in the directory of the source code:
Method 1: test locally by:
python setup.py test
Method 2: test in a virtual environment using
tox
:pip install tox tox
Usage#
The package can be used in two ways:
1. Import as a Module#
>>> from ortho import OrthogonalFunctions
>>> # Generate object of orthogonal functions
>>> OF = OrthogonalFunctions(
... start_index=1,
... num_func=9,
... end_interval=1,
... verbose=True)
>>> # Get numeric coefficients alpha[i] and a[i][j]
>>> alpha = OF.alpha
>>> a = OF.coeffs
>>> # Get symbolic coefficients alpha[i] and a[i][j]
>>> sym_alpha = OF.sym_alpha
>>> sym_a = OF.sym_coeffs
>>> # Get symbolic functions phi[i]
>>> sym_phi = OF.sym_phi
>>> # Print Functions
>>> OF.print()
>>> # Check mutual orthogonality of Functions
>>> status = OF.check(verbose=True)
>>> # Plot Functions
>>> OF.plot()
The parameters are:
start_index
: the index of the starting function, \(i_0\). Default is1
.num_func
: number of orthogonal functions to generate, \(n\). Default is9
.end_interval
: the right interval of orthogonality, \(L\). Default is1
.
2. Use As Standalone Application#
The standalone application can be executed in the terminal in two ways:
If you have installed the package, call
ortho
executable in terminal:ortho [options]
The optional argument
[options]
will be explained in the next section. When the package ortho is installed, the executableortho
is located in the/bin
directory of the python.Without installing the package, the main script of the package can be executed directly from the source code by
# Download the package git clone https://github.com/ameli/ortho.git # Go to the package source directory cd ortho # Execute the main script of the package python -m ortho [options]
Optional arguments#
When the standalone application (the second method in the above) is called, the executable accepts some optional arguments as follows.
Option |
Description |
---|---|
|
Prints a help message. |
|
Prints version. |
|
Prints author info, citation and license. |
|
Number of orthogonal functions to generate. Positive integer. Default is 9. |
|
Starting function index. Non-negative integer. Default is 1. |
|
End of the interval of functions domains. A real number greater than zero. Default is 1. |
|
Checks orthogonality of generated functions. |
|
Plots generated functions, also saves the plot as pdf file in the current directory. |
Parameters#
The variables \(i_0\), \(n\), and \(L\) can be set in the script by the following arguments,
Variable |
Variable in script |
Option |
---|---|---|
\(i_0\) |
|
|
\(n\) |
|
|
\(L\) |
|
|
Examples#
Generate nine orthogonal functions from index 1 to 9 (defaults)
ortho
Generate eight orthogonal functions from index 1 to 8
ortho -n 8
Generate nine orthogonal functions from index 0 to 8
ortho -s 0
Generate nine orthogonal functions that are orthonormal in the interval [0,10]
ortho -e 10
Check orthogonality of each two functions, plot the orthonormal functions and save the plot to pdf
ortho -c -p
A complete example:
ortho -n 9 -s 1 -e 1 -c -p
Output#
Displays the orthogonal functions as computer algebraic symbolic functions. An example a set of generated functions is shown below.
phi_1(t) = sqrt(x)
phi_2(t) = sqrt(6)*(5*x**(1/3) - 6*sqrt(x))/3
phi_3(t) = sqrt(2)*(21*x**(1/4) - 40*x**(1/3) + 20*sqrt(x))/2
phi_4(t) = sqrt(10)*(84*x**(1/5) - 210*x**(1/4) + 175*x**(1/3) - 50*sqrt(x))/5
phi_5(t) = sqrt(3)*(330*x**(1/6) - 1008*x**(1/5) + 1134*x**(1/4) - 560*x**(1/3) + 105*sqrt(x))/3
phi_6(t) = sqrt(14)*(1287*x**(1/7) - 4620*x**(1/6) + 6468*x**(1/5) - 4410*x**(1/4) + 1470*x**(1/3) - 196*sqrt(x))/7
phi_7(t) = 5005*x**(1/8)/2 - 10296*x**(1/7) + 17160*x**(1/6) - 14784*x**(1/5) + 6930*x**(1/4) - 1680*x**(1/3) + 168*sqrt(x)
phi_8(t) = sqrt(2)*(19448*x**(1/9) - 90090*x**(1/8) + 173745*x**(1/7) - 180180*x**(1/6) + 108108*x**(1/5) - 37422*x**(1/4) + 6930*x**(1/3) - 540*sqrt(x))/3
phi_9(t) = sqrt(5)*(75582*x**(1/10) - 388960*x**(1/9) + 850850*x**(1/8) - 1029600*x**(1/7) + 750750*x**(1/6) - 336336*x**(1/5) + 90090*x**(1/4) - 13200*x**(1/3) + 825*sqrt(x))/5
Displays readable coefficients, \(\alpha_i\) and \(a_{ij}\) of the functions. For instance,
i alpha_i a_[ij]
------ ---------- -----------------------------------------------------------------------
i = 1: +sqrt(2/2) [1 ]
i = 2: -sqrt(2/3) [6, -5 ]
i = 3: +sqrt(2/4) [20, -40, 21 ]
i = 4: -sqrt(2/5) [50, -175, 210, -84 ]
i = 5: +sqrt(2/6) [105, -560, 1134, -1008, 330 ]
i = 6: -sqrt(2/7) [196, -1470, 4410, -6468, 4620, -1287 ]
i = 7: +sqrt(2/8) [336, -3360, 13860, -29568, 34320, -20592, 5005 ]
i = 8: -sqrt(2/9) [540, -6930, 37422, -108108, 180180, -173745, 90090, -19448 ]
i = 9: +sqrt(2/10) [825, -13200, 90090, -336336, 750750, -1029600, 850850, -388960, 75582]
Displays the matrix of the mutual inner product of functions to check orthogonality (using option
-c
). An example of the generated matrix of the mutual inner product of functions is shown below.
[[1 0 0 0 0 0 0 0 0]
[0 1 0 0 0 0 0 0 0]
[0 0 1 0 0 0 0 0 0]
[0 0 0 1 0 0 0 0 0]
[0 0 0 0 1 0 0 0 0]
[0 0 0 0 0 1 0 0 0]
[0 0 0 0 0 0 1 0 0]
[0 0 0 0 0 0 0 1 0]
[0 0 0 0 0 0 0 0 1]]
Plots the set of functions (using option
-p
) and saves the plot in the current directory. An example of a generated plot is shown below.