38 views (last 30 days)

Hello,

has anybody managed or can give some advice how to apply the homotopy method within matcont? My goal is to follow the path of solution x (equilibrium) to a linear shifted function H(x, t) = F(x(t)) − (1 − t)F(x0). During that path, I want to encounter possible bifurcatin points. F is a different function, that outputs just some kind of vector to the given x(t).

MatCont seems to be perfect for that application but it seems like it only handles differential equations. How can I adapt it to work with a simple (system of) equations?

Andrew Newell
on 24 Apr 2020

Edited: Andrew Newell
on 24 Apr 2020

The primary purpose of MatCont (which is a GUI front end for Cl_MatCont) is to analyze solution curves of the form . These may be equilibrium solutions of an ODE system

and that is how MatCont expects you to enter it. So one approach would just be to pretend it's an ODE and then find the equilibrium solutions.

MatCont creates a curve file and then uses Cl_MatCont to solve for the curve and its critical points. So another approach is to create the curve file yourself and run Cl_MatCont. You can then formulate it explicitly as an equilibrium curve instead of an ODE. This is more work and requires a much greater familiarity with Cl_MatCont, but it's a better approach if you're planning to solve a particular kind of problem many times. If you want to do that, I recommend reading the manual. In the first example it shows you how to solve and there is no ODE.

Andrew Newell
on 28 Apr 2020

That doesn't sound like it's likely to be very efficient or effective. To get much advantage out of multiplying solutions by following bifurcations, you'd have to start with a very symmetric polynomial. And you'd probably have to pay close attention to each path, so you'd better not have many solutions.

It turns out that you can get smooth, monotonic homotopies "with probability 1" (i.e., aside from some isolated exceptional cases) if you are doing it in complex projective space and add some randomness into the problem. Matcont can't do that, but a package called Bertini can. And I have created a Matlab front end for this called BertiniLab that is in the Mathworks File Exchange.

The beauty of Bertini is that it is virtually guaranteed to find all of the solutions to a system of polynomial equations, you don't have to worry about finding the starting points, and it has very sophisticated "end games" that can give you as much accuracy as you like. However, you get all the complex solutions, the vast majority of which are generally not real, so you have to sift through them. In general, the number of solutions goes up rapidly with dimension or degree, so you can't do very large systems or high polynomial degree. Mind you, that's an inherent problem, and I don't know if there is any reason to expect that your system has an unusually low number of solutions.

There are some tricks that greatly improve the efficiency. One is paramatopy, which creates a good starting system from which you can rapidly move to any parameter you want. There is also regeneration, which is not easily explained in a sentence or two. These are implemented in BertiniLab. The creators of Bertini have also created Bertini_real, which is presumably much more efficient for finding real solutions, but I haven't created a Matlab front end for it.

Opportunities for recent engineering grads.

Apply Today
## 0 Comments

Sign in to comment.