Path: news.mathworks.com!not-for-mail
From: "Romain " <romain_leg@yahoo.fr>
Newsgroups: comp.soft-sys.matlab
Subject: System of nonlinear equations: no convergence to a root using fsolve
Date: Fri, 8 Jul 2011 16:56:09 +0000 (UTC)
Organization: The MathWorks, Inc.
Lines: 20
Message-ID: <iv7cr9$aqv$1@newscl01ah.mathworks.com>
Reply-To: "Romain " <romain_leg@yahoo.fr>
NNTP-Posting-Host: www-06-blr.mathworks.com
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
X-Trace: newscl01ah.mathworks.com 1310144169 11103 172.30.248.38 (8 Jul 2011 16:56:09 GMT)
X-Complaints-To: news@mathworks.com
NNTP-Posting-Date: Fri, 8 Jul 2011 16:56:09 +0000 (UTC)
X-Newsreader: MATLAB Central Newsreader 2943433
Xref: news.mathworks.com comp.soft-sys.matlab:735572

Hello everybody,

I have a problem using the fsolve function. The aim of the procedure I implement is to identify a matrix subject to certain restrictions. To do so, I can decompose my matrix into a nonlinear system of equations. It is a rather small system (8 equations, 8 unknown), however, when I use the fsolve function, I always obtain the error message:'Optimizer appears to be converging to a minimum that is not a root:Sum of squares of the function values exceeds the square root of options.Tolfun.Try again with a new starting point'. I tried with many different initial values, but that was no improvement. Precisely, here is my system:

F(1)=x(1)^2+x(2)^2+x(3)^2-EXO_SIGMA1SQ;
F(2)=x(4)^2+x(5)^2+x(6)^2-EXO_SIGMA2SQ;
F(3)=x(7)^2+x(8)^2-EXO_SIGMA3SQ;
F(4)=x(1)*x(4)+x(2)*x(5)+x(3)*x(6)-EXO_SIGMA12;
F(5)=x(2)*x(7)+x(3)*x(8)-EXO_SIGMA13;
F(6)=x(5)*x(7)+x(6)*x(8)-EXO_SIGMA23;
F(7)=x(2)*EXO_K1+x(5)*EXO_K2+x(7);
F(8)=x(3)*EXO_K1+x(6)*EXO_K2+x(8);
The EXO variables are constants whose values are known by the program when it runs the algorithm, and the actual variables to value are the x(.).


I am a bit surprised since the system is rather small, and since I previously obtained convergence very easily with a very similar system. According to my thesis supervisor, the system should admit a solution.

Then my question is: how can i solve this system in the end? Is there a way to implement a loop that would create random initial values, so that in the end one of these random sets could succeed to carry the solution? Is there a way to compel the function to stop to a global min, and not a local min? Should I try a different function for solving?

Thanks a lot for any help.