Software Downloads

Multi-Z Hypercomplex Library

Multicomplex and multidual numbers are two generalizations of complex numbers with multiple imaginary axes, useful for numerical computation of derivatives with machine precision. The similarities between multicomplex and multidual algebras allowed us to create a unified library (multiZ) to use either one for sensitivity analysis. This library can be used to compute arbitrary order derivates of functions of a single variable or multiple variables. For more information on the mutliZ library please refer to the following:

MultiZ: A Library for Computation of High-order Derivatives Using Multicomplex or Multidual Numbers

Order Truncated Imaginary Algebra (OTI) Library

The Order Truncated Imaginary (OTI) is a hypercomplex algebra that efficiently extends the Dual numbers for arbitrary-order multivariate automatic differentiation of computational models. In contrast to Multicomplex/Hyperduals, whose growth is exponential with respect to the order of derivative and requires multiple evaluations for evaluating multivariate derivatives, OTI numbers provide an efficient approach to computing all the required derivatives of a computational model in a single evaluation of the model. More details on OTIs can be found in the Ph.D. thesis Order Truncated Imaginary Algebra for Computation of Multivariable High-Order Derivatives in Finite Element Analysis“.

An open-source implementation of OTI numbers in C, Fortran, and Python can be found on the following GitHub repository.


Examples

The following section contains introductory source code examples implementing HYPAD techniques.

The following section contains example problems and solutions for using complex step differentiation as well as using dual, bidual, and multidual numbers for differentiation.  These examples are presented as Jupyter notebooks. If you require additional information on how to use Jupyter notebooks, please refer to the following link:

https://docs.jupyter.org/en/latest/install/notebook-classic.html

Note that to run the dual, bidual, and multidual examples you will need to download the Multi-Z package seen above and add the folder containing multiZ to your PYTHONPATH.

Complex_Jupyter_Notebooks

Dual_Jupyter_Notebooks

Bidual_Jupyter_Notebooks

instructions on how to add multiZ to the PYTHONPATH within the anaconda framework refer to the following pdf:

multiZ-PYTHONPATH-instructions

Scroll to Top