Closed alexheaton2 closed 3 years ago
Hi Alex,
the problem in your example is that the solution you provide is singular:
julia> using LinearAlgebra
julia> J = differentiate(vcat(gs,L), xvarz_moving_frame)
julia> J₀ = evaluate(J, xvarz_moving_frame => startsolutions0, bvarz => [b0])
julia> minimum(svdvals(J₀))
0.00
The algorithm checks if a solution is a valid start solution by applying Newton's method. If the method converges, then the solution is labelled a valid start solution. In your case, it does not converge, because the jacobian is singular.
Hey Alex,
```
). Eg
```julia
a = 3
b = a^2
produces
a = 3
b = a^2
But I think it would make sense to improve the return_code
/ error message to distinguish between a non-solution and a singular start solution
Okay, I see. Thanks for the help. Is there a standard way to deal with this situation? I can't get rid of it by randomization, can I? Is there something I can do to my system of equations? Probably not... I guess I should just compute a witness set for the 1-dimensional component.
The solution set should be 1-dimensional nearby that point, and I want to see if it is a cusp point or not. I was thinking to sample the variety nearby at many points, and then project all the sampled points into some 2 or 3 dimensional subspace. If the singular point I started with was a cusp, then it should still look like a cusp after projection.
Any thoughts on dealing with any of these issues? Thanks! -alex
Okay, I computed a witness set, repeatedly sampled, and projected the cusp from 16 dimensional space into a random 2-dimensional subspace. Here it is...
This looks like a textbook cusp, nice! :)
Pretty cuspy, indeed.
I just merged #455 which should help to point out the problem faster for the next person who runs into this.
I have an example where I know a valid start solution, yet my parameter homotopy gives the return_code :terminated_invalid_startvalue. This seems wrong. What am I doing wrong, or could there be a better return_code message? I am 100% sure the start solution is valid, since the polynomials are constructed from the start solution, basically. Also, I used the evaluate(...) function and checked they give zeros for all equations. What am I doing wrong?
Here is the code...
In the docs at https://www.juliahomotopycontinuation.org/HomotopyContinuation.jl/stable/tracker/#HomotopyContinuation.is_invalid_startvalue-Tuple{TrackerResult} it says "Tracking terminated since the provided start value was invalid."