Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/gpavanb1/fcontin

Numerical Continuation using just the residual. 8k+ downloads
https://github.com/gpavanb1/fcontin

arc-length automatic-differentiation jax nonlinear-equations numerical-continuation numerical-methods python

Last synced: about 2 months ago
JSON representation

Numerical Continuation using just the residual. 8k+ downloads

Awesome Lists containing this project

README

        

# FContin

![Made with Love in India](https://madewithlove.org.in/badge.svg) [![Downloads](https://pepy.tech/badge/fcontin)](https://pepy.tech/project/fcontin)

Solve F(**u**, λ) = 0 over λ with just F!

This repository contains [natural](https://en.wikipedia.org/wiki/Numerical_continuation#Natural_parameter_continuation) and [pseudo-arclength/Euler-Newton](https://en.wikipedia.org/wiki/Numerical_continuation#Pseudo-arclength_continuation) continuation library using [JAX](https://github.com/google/jax) for automatic differentiation, [numdifftools](https://pypi.org/project/numdifftools/) for numerical differentiation using real or complex derivatives, and [Pacopy](https://github.com/nschloe/pacopy)

This enables automatic/numerical differentiation to obtain the Jacobian and derivative with respect to the parameter. GPU/TPU support is packaged as part of JAX.

# How to install and execute?

Tested on Python 3.6.2 and [pacopy 0.1.0](https://github.com/sigma-py/pacopy/tree/branch-switching)

Just run
```
pip install fcontin
```

The following program illustrates a basic example
```python
from fcontin.ContProblem import ContProblem

###
# Output record
###
lmbda_list = []
values_list = []

def callback(k, lmbda, sol):
# Use the callback for plotting, writing data to files etc.
lmbda_list.append(lmbda)
values_list.append(sol)

###
# Define problem
###

def f(u, lmbda):
"""The evaluation of the function to be solved
"""
return [
u[0] + u[1] - (lmbda + 1.), u[0] - u[1] - lmbda
]

###
# Solving and Plotting
###

# Initial guess
u0 = [0., 0.]
# Initial parameter value
lmbda0 = 1.0

# Creating the problem
# Natural or Euler-Newton for cont_method
# Forward, Reverse, Numerical, Complex for jac_mode
problem = ContProblem(f, u0, lmbda0,
cont_method='Euler-Newton',
jac_mode='Forward',
max_steps=10,
newton_tol=1e-10,
callback=callback
)

problem.solve()
```

## Whom to contact?

Please direct your queries to [gpavanb1](http://github.com/gpavanb1)
for any questions.