F solve error, how can I fix it?

조회 수: 4 (최근 30일)
Fares Sahli F2HYGC
Fares Sahli F2HYGC 2020년 6월 27일
댓글: Fares Sahli F2HYGC 2020년 6월 27일
I receive the following error: fsolve stopped because the problem appears regular as measured by the gradient,
but the vector of function values is not near zero as measured by the
value of the function tolerance.
My code is as follows:
function F = root2d(x)
F(1) = -(118/121)*x(1)^2-(333/242)*x(2)^2-(196/121)*x(1)*x(2)+(63/121)*x(1)-(361/242)*x(2)-(724/121);
F(2) = (21/121)*x(1)^2+(299/484)*x(2)^2+(80/121)*x(1)*x(2)-(35/242)*x(1)+(391/484)*x(2)-256/121;
end
and the command I use is
fun = @root2d;
x0 = [1,1];
x = fsolve(fun,x0)
I've tried various combinations of x0 but had no effect, can someone please help?

채택된 답변

Walter Roberson
Walter Roberson 2020년 6월 27일
The four roots are all complex values. You will not be able to find them using fsolve unless you split the x into two variables each, one for real part and one for imaginary part, OR you use a complex initial value.
  댓글 수: 5
Walter Roberson
Walter Roberson 2020년 6월 27일
syms x [1 2]
sol = solve(root2d(x))
vpa(sol.x1)
vpa(sol.x2)
Fares Sahli F2HYGC
Fares Sahli F2HYGC 2020년 6월 27일
Thank you!

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

John D'Errico
John D'Errico 2020년 6월 27일
편집: John D'Errico 2020년 6월 27일
There are no real solutions. First, I converted them to a problem that fimplicit can use.
F1 = @(x,y) -(118/121)*x.^2-(333/242)*y.^2-(196/121)*x.*y+(63/121)*x-(361/242)*y-(724/121);
F2 = @(x,y) (21/121)*x.^2+(299/484)*y.^2+(80/121)*x.*y-(35/242)*x+(391/484)*y-256/121;
So the same equations, changed using find and replace in the editor to insure no mistakes were made.
H2 = fimplicit(F2,[-500,500,-500,500]);
Your expression F(2) has a locus of solutions that form a hyperbola. Two hyperbolic arcs, extending to infinity in either direction.
The first however, has no real solutions at all. We can prove that using solve. For example, converting F1 to a symbolic form, if I use solve to find the two roots of the quadratic for X as a function of Y, we will find it involves a square root, of an expression that looks like this:
sqrt(-2.7438*Y^2 - 7.5058*Y - 23.069)
The sub-expression inside the sqrt is negative for ALL values of Y. Therefore all solutions for F1 are complex. It has no real solutions that will make it zero, for any inputs.
syms Y
fplot(-2.7438*Y^2 - 7.5058*Y - 23.069)
As I said, the solution involves the squre root of that value, which is always negative, as a parabolic arc.
As far as having received an error, the message was a correct assessment, although that was actually a warning message, not a true error. There simply are no real solutions to this set of equations.

RAVIKIRAN YALAMARTHI
RAVIKIRAN YALAMARTHI 2020년 6월 27일
편집: RAVIKIRAN YALAMARTHI 2020년 6월 27일
g = @(x,y) -(118/121)*x.^2 -(333/242)*y.^2 -(196/121)*x.*y +(63/121)*x -(361/242)*y -(724/121);
h = @(x,y) (21/121)*x.^2 +(299/484)*y.^2 +(80/121)*x.*y -(35/242)*x +(391/484)*y -(256/121);
f = @(w) [g(w(1),w(2));h(w(1),w(2))];
w0 = [.1+.1*1i, .1 +.1*1i];
wRoot = fsolve(f,w0)

카테고리

Help CenterFile Exchange에서 Calculus에 대해 자세히 알아보기

제품

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by