Solve large number of independent systems with fsolve, where some systems do not have a solution
2 views (last 30 days)
Suppose I have N nonlinear systems of equations for , where and are each vectors of length m. For each n, I want to feed in the vector and obtain the solution using fsolve.
I know that if the system has a solution for every , then I can do this by feeding in an -length vector of appended 's and solving for the vector of appended 's using a single call of fsolve, where I provide an appropriate structure of the Jacobian to specify that the N systems are independent.
I want to find the solution for each n where the solution exists. However, when there are even a few n where the solution does not exist, fsolve often will not find the solution even for those n where it does exist. I think this is because the few n without a solution throw off the sum of squares, so that fsolve "gives up" quickly on finding a solution for the entire -length system. Is there some way to "vectorize" fsolve so that it finds the exact solution for each n where the solution exists, or will I have to resort to looping over all n and using fsolve on each individual system?
Apologies if anything is unclear; this is my first time asking a question here.
Matt J on 1 Dec 2023
Edited: Matt J on 1 Dec 2023
I see no reason why fsolve would "give up" if you've set MaxIterations and MaxFunctionEvaluations to Inf, regardless of whether a solution to all equations exists.
However, it is often not a good idea to try to combine smaller systems into an Nm-dimensional systems. For one thing some sub-systems could take a lot longer to converge than others, even if a solution to every subsytem does exist. With the Nm-dimensional formulation, you lose the ability to apply separate stopping criteria to each of the subsystems, and will be bottle-necked by the slowest system.
Also, although I don't know this to be true for your case, often the solution of one system can serve as a good initial x0 for the next equation system in the sequence, reducing the iterations that the next equation system will require. You lose the ability to exploit that if you try to solve all N systems simultaneously.