MATLAB Answers

Fsolve function does not solve a nonlinear system with complex conjugation.

16 views (last 30 days)
Amir Usmanov
Amir Usmanov on 22 Dec 2019
Commented: Matt J on 23 Jan 2020 at 13:09
Hello, I beg you help me with important part of my future diploma. Part of my code for solving nonlinear equations does not work. I used function ansver3:
function F = ansver3(D1,D2,D3,D4,D5,D6,Int1,Int21,Int22,Int23,x)
F(1,1) =x(1).*D1+x(2).*D2+x(3).*D3;
F(2,1) =x(1).*D4+x(2).*D5+x(3).*D6;
After, I applied this function in fsolve:
All answers was:
No solution found.
fsolve stopped because the relative size of the current step is less than the value of the step size tolerance squared, but the vector of function values is not near zero as measured by the value of the function tolerance.
In my code only D1, D4, Int1 are real numbers, other are complex. Before this attempt, I tried to solve this system with solve function but got 0-by-1 if in third equation in system I had used conj function. Please, help me with solution of this system.


Walter Roberson
Walter Roberson on 21 Jan 2020 at 21:05
It is often the case that you can get better results on fsolve() of a complex-valued system by splitting real and imaginary components, such as
function F = ansver3(D1,D2,D3,D4,D5,D6,Int1,Int21,Int22,Int23,x)
F11 =x(1).*D1+x(2).*D2+x(3).*D3;
F21 =x(1).*D4+x(2).*D5+x(3).*D6;
F = [real(F11); imag(F11); real(F21); imag(F21); real(F31); imag(F31)];

Sign in to comment.

Answers (1)

Star Strider
Star Strider on 22 Dec 2019
If you are absolutely certain that your function has identifiable roots, choose different initial parameter estimates. (Nonlinear parameter estimation functions are extremely sensitive to the initial parameter estimates.)


Star Strider
Star Strider on 21 Jan 2020 at 19:05
Amir Usmanov’s Comment posted as an Answer moved here —
Thanks for the help, I will try to do so.

Sign in to comment.

Sign in to answer this question.