# Numerical Continuation in Julia?

**URL:** <https://discourse.julialang.org/t/numerical-continuation-in-julia/5522>\
**Category:** Numerics\
**Created:** [August 23, 2017, 9:18am UTC](https://discourse.julialang.org/t/numerical-continuation-in-julia/5522 "2017-08-23T09:18:21Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![s-marashi](https://avatars.discourse-cdn.com/v4/letter/s/838e76/32.png) [@s-marashi](https://discourse.julialang.org/u/s-marashi)\
**Post date:** [August 23, 2017, 9:18am UTC](https://discourse.julialang.org/t/numerical-continuation-in-julia/5522/1 "2017-08-23T09:18:21Z")

</div>

What are available options for numerical continuation in Julia?

While it’s irrelated does any body know about Auto software?

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [August 23, 2017, 2:29pm UTC](https://discourse.julialang.org/t/numerical-continuation-in-julia/5522/2 "2017-08-23T14:29:02Z")

</div>

We have a wrapper for PyDSTool:

[https://github.com/JuliaDiffEq/PyDSTool.jl](https://github.com/JuliaDiffEq/PyDSTool.jl)

Here’s a usage example:

[http://docs.juliadiffeq.org/latest/analysis/bifurcation.html](http://docs.juliadiffeq.org/latest/analysis/bifurcation.html)

PyDSTool is quite slow though, so I hope to get Auto wrapped someday as part of the JuliaDiffEq-sphere.

---

<div class="post-metadata">

**Author:** ![LysandrosAn](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lysandrosan/32/12528_2.png) [@LysandrosAn](https://discourse.julialang.org/u/LysandrosAn)\
**Post date:** [October 3, 2020, 10:12pm UTC](https://discourse.julialang.org/t/numerical-continuation-in-julia/5522/3 "2020-10-03T22:12:16Z")

</div>

I know this is a late post -what is the current status of the AUTO wrapper, or developing teams towards a new package for this functionality (besides PyDS) ?

---

<div class="post-metadata">

**Author:** ![ctkelley](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ctkelley/32/10684_2.png) [@ctkelley](https://discourse.julialang.org/u/ctkelley)\
**Post date:** [October 3, 2020, 10:48pm UTC](https://discourse.julialang.org/t/numerical-continuation-in-julia/5522/4 "2020-10-03T22:48:10Z")

</div>

BifurcationKit.Jl

> **[GitHub - bifurcationkit/BifurcationKit.jl: A Julia package to perform...](https://github.com/bifurcationkit/BifurcationKit.jl)**
>
> A Julia package to perform Bifurcation Analysis. Contribute to bifurcationkit/BifurcationKit.jl development by creating an account on GitHub.

sees to be done right

---

<div class="post-metadata">

**Author:** ![ctkelley](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ctkelley/32/10684_2.png) [@ctkelley](https://discourse.julialang.org/u/ctkelley)\
**Post date:** [October 3, 2020, 10:53pm UTC](https://discourse.julialang.org/t/numerical-continuation-in-julia/5522/5 "2020-10-03T22:53:04Z")

</div>

Auto is excellent, but really old. It only has direct methods for linear algebra and that is a problem for large systems. The only continuation code I know of that can use iterative linear solvers is LOCA from Trilinos.

---

<div class="post-metadata">

**Author:** ![rveltz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rveltz/32/2707_2.png) [@rveltz](https://discourse.julialang.org/u/rveltz)\
**Post date:** [October 4, 2020, 12:06am UTC](https://discourse.julialang.org/t/numerical-continuation-in-julia/5522/6 "2020-10-04T00:06:20Z")

</div>

> The only continuation code I know of that can use iterative linear solvers is LOCA from Trilinos.

I am not sure what you mean here. [rveltz/BifurcationKit.jl](https://github.com/rveltz/BifurcationKit.jl) that you reference above can do this. In matlab, [pde2path](http://www.staff.uni-oldenburg.de/hannes.uecker/pde2path/) can do this as well, in python you have [pyNCT](https://pypi.org/project/PyNCT/) and [pacopy](https://github.com/nschloe/pacopy) who use direct sparse solver but adding iterative ones would not be that difficult.

---

<div class="post-metadata">

**Author:** ![ctkelley](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ctkelley/32/10684_2.png) [@ctkelley](https://discourse.julialang.org/u/ctkelley)\
**Post date:** [October 4, 2020, 12:18am UTC](https://discourse.julialang.org/t/numerical-continuation-in-julia/5522/7 "2020-10-04T00:18:06Z")

</div>

Sorry about that. I did not know that BifurcationKit did that.

I do not agree that “adding iterative ones would not be that difficult”. For example, the eigenvalue computation to detect Hopf bifurcation is not trivial at all with an iterative solver. How did BifurcationKit do that?

It is not that hard to chase simple folds or pitchforks (even I’ve done it) with iterative methods, but Hopf is really tough.

---

<div class="post-metadata">

**Author:** ![rveltz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rveltz/32/2707_2.png) [@rveltz](https://discourse.julialang.org/u/rveltz)\
**Post date:** [October 4, 2020, 12:47am UTC](https://discourse.julialang.org/t/numerical-continuation-in-julia/5522/8 "2020-10-04T00:47:24Z")

</div>

> Sorry about that.

No worries!!

> I did not know that BifurcationKit did that.

You are not the first to say that 🤔 although I was carefull to write Krylov-Newton whenever I could. Even the preconditioner is coded…

### Some examples

This example is Matrix free (periodic orbits): [https://rveltz.github.io/BifurcationKit.jl/dev/tutorialsCGL/](https://rveltz.github.io/BifurcationKit.jl/dev/tutorialsCGL/)  
This one runs on GPU and is MatrixFree: [https://rveltz.github.io/BifurcationKit.jl/dev/tutorials2b/#The-Swift-Hohenberg-equation-(non-local)-on-the-GPU-(Advanced)-1](https://rveltz.github.io/BifurcationKit.jl/dev/tutorials2b/#The-Swift-Hohenberg-equation-(non-local)-on-the-GPU-(Advanced)-1)

> I do not agree that “adding iterative ones would not be that difficult”. For example, the eigenvalue computation to detect Hopf bifurcation is not trivial at all with an iterative solver

pde2path (mentioned above) do that already. It uses `eigs` behind the scene.

> How did BifurcationKit do that?

BifurcationKit monitors the unstable eigenvalues. When one of them have nonzero imaginary part, we declare a Hopf (see [here](https://github.com/rveltz/BifurcationKit.jl/blob/master/src/Bifurcations.jl#L70)) because we consider equations over the reals. The bifurcation point are located (fairly) precisely with a bisection algorithm. You can also do codim 2 Hopf continuation and hence locate the simple Hopf point with a Newton algorithm (see [here](https://rveltz.github.io/BifurcationKit.jl/dev/tutorials3/#Continuation-of-Hopf-points-1)). Finally the Hopf normal form can be computed (follow previous link) and automatic branch switching to periodic orbit is provided.

In a nutshell, everything is in the eigen solver, you (the user) have to tune it to return all unstable eigenvalues. You can use many eigen solvers (see [here](https://rveltz.github.io/BifurcationKit.jl/dev/linearsolver/#Eigen-solvers-1)) or other ones like the FEAST algo, etc. The interface is flexible enough to easily use whatever eigensolver. Actually, the ability to use your own eigensolver (and also linearsolver) was one of the first design consideration for the package.

---

<div class="post-metadata">

**Author:** ![ctkelley](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ctkelley/32/10684_2.png) [@ctkelley](https://discourse.julialang.org/u/ctkelley)\
**Post date:** [October 4, 2020, 11:39am UTC](https://discourse.julialang.org/t/numerical-continuation-in-julia/5522/9 "2020-10-04T11:39:32Z")

</div>

Nice work.

---

<div class="post-metadata">

**Author:** ![rveltz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rveltz/32/2707_2.png) [@rveltz](https://discourse.julialang.org/u/rveltz)\
**Post date:** [October 4, 2020, 12:49pm UTC](https://discourse.julialang.org/t/numerical-continuation-in-julia/5522/10 "2020-10-04T12:49:44Z")

</div>

Thank you!
