MatCont for Homotopy Method
Mostrar comentarios más antiguos
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?
Respuestas (1)
Andrew Newell
el 24 de Abr. de 2020
Editada: Andrew Newell
el 24 de Abr. de 2020
0 votos
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.
8 comentarios
FBBVC
el 25 de Abr. de 2020
Andrew Newell
el 25 de Abr. de 2020
Editada: Andrew Newell
el 25 de Abr. de 2020
FBBVC, not following a particular parameter is one of the strengths of MatCont because it continues to follow a curve efficiently even if it goes back on itself. And it detects the bifurcations, so I'm not sure what the problem is. If you want a closely spaced set of values for t, why not just interpolate?
FBBVC
el 27 de Abr. de 2020
Andrew Newell
el 27 de Abr. de 2020
If I understand you correctly, you expect the homotopy curves to proceed monotonically from
to
, and when they don't you believe that's because of the path continuation algorithm. But, in general, there is no reason to expect them to be monotonic (check out "Probability-one homotopies in computational science", for example).
Maybe it would help if I understood exactly what you're trying to do, so here are some questions:
- Is the path itself your goal, or the solutions of
? - Are you looking for real or complex solutions?
- Is
a polynomial system or some other kind of function? - How did you find
?
Andrew Newell
el 28 de Abr. de 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.
FBBVC
el 28 de Abr. de 2020
Andrew Newell
el 29 de Abr. de 2020
Glad to help!
Categorías
Más información sobre Mathematics en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!