I have been using the trust region method as implemented in dtrnlspbc to solve a system of non-linear equations but now I am stuck. The solver stops after iteration 1 with stopping criteria 2 which means as I understand it that the trust region is too small. The residual is close to the initial residual (0.65 compared to 0.70) and this happens independent of the initial size of the trust region, rs, the stopping criteria eps and the initial guess of the solution vector which I believe is fairly good.
The problem I am trying to solve is related to electronic structures and has approximately 150 unknowns, n, and n+3 equations. It can be described as a set of 10 simple conservation laws each for something behaving like flows within and between 15 (can vary) levels plus three global conservation laws. The solution is expected to be nearly, but not quite, degenerate between the different levels. Flow 1 at level A is expected to be similar to flow 1 at level B, but different from flow 2 at level A and so on. The flows are restricted to be between 0.0 and 1.0 (normalized).
I am using the same method to solve a similar but smaller local problem in the code without any problem and I have double and triple checked the external subroutine calculating the value fcn. Could it be that my problem is just too ill conditioned to be solvable (hard to tell without the code, I know, but it is very difficult to extract just a small piece of code showing the problem) or is my starting guess too bad? Or is this what I should expect from the solver?
Any and all help is appreciated!
Well, it is really hard to say. If the region of f(x) value is too small that the each step of x is larger than f(x). it is really difficult to judge the true value and error value. And MKL uses trust region iteration, the minimum rs value should be no less than 0.1. My advice you could scale f(x) by a known regulation (3/4 power of f(x), add with ascending series...) to expend region of f(x) value. Then use non-linear square, and you could change back to real result manually. If you think it might be useful, you could have a try. I could not make sure if your problem is too ill conditioned to be solvable by this algorithm, or caused by problem of your code implementation. Could you please share a test case that I can check if the problem is due to code or solution. Hope it could be helpful to you.
Hi Fiona and thank you for your reply!
It's unfortunately very difficult for me to create a short example because it takes many thousands of lines of code to create the exact details of the functions in question but I will try the scaling as you recommend. I will be on the road for almost two weeks and unable to test the idea but I will report back as soon as I have tried it.
I have now been able to test the scaling you recommended and it worked! Some preliminary tests indicated that there were patterns in the residuals where some groups were much smaller than others so I used that information to scale the appropriate functions and after that the optimization ran to convergence. Thank you very much for your input!