Discussion:
[Scilab-users] Having a Problem with fsolve
rsherry8
2018-10-15 18:39:52 UTC
Permalink
I am trying to solve a system of two non-linear equations using fsolve.
I define the following two functions:

function z=g1(x,y)
z = x^2 + y^2
endfunction

function z=g2(x,y)
z = x^4 + y^4 - 20
endfunction

When I type something like: g2(2,2)
I get 12 which is right.

I then run the following command:
[xres]=fsolve([0,0],g1,g2);

and I get the error message:

fsolve: exception caught in 'jac' subroutine.
at line 2 of function g1
in builtin fsolve

What am I doing wrong?

Bob
Samuel Gougeon
2018-10-15 21:52:40 UTC
Permalink
Hello,
Post by rsherry8
I am trying to solve a system of two non-linear equations using
function z=g1(x,y)
z = x^2 + y^2
endfunction
function z=g2(x,y)
z = x^4 + y^4 - 20
endfunction
When I type something like: g2(2,2)
I get 12 which is right.
[xres]=fsolve([0,0],g1,g2);
If it is provided, g2() must be the jacobian of g1(): it must compute
and evaluate the partial derivatives of g1(), with respect to x and to y.
That's definitely not the case with your g2(). It should rather return
something like [2*x 2*y].

For what you likely want to do, here are two examples (extracted from a
document of mine in french, sorry):


Actually, the fsolve() page is rather poor : both given examples are
about a single variable.
https://help.scilab.org/docs/6.0.1/en_US/fsolve.html

fsolve() is a key function. We should improve its help page.

HTH
Samuel
Samuel Gougeon
2018-10-15 22:05:58 UTC
Permalink
.../...
Actually, the fsolve() page is rather poor : both given examples are
about a single variable.
https://help.scilab.org/docs/6.0.1/en_US/fsolve.html
fsolve() is a key function. We should improve its help page.
This is now explicitly requested there <http://bugzilla.scilab.org/15810>.
rsherry8
2018-10-16 00:00:27 UTC
Permalink
You Wrote:

If it is provided, g2() must be the jacobian of g1(): it must
compute and evaluate the partial derivatives of g1(), with respect to x
and to y.
That's definitely not the case with your g2(). It should rather
return something like [2*x 2*y].

I do not understand this because I am trying to solve a system of
equations and g2 represents the second equation. I suspect I am missing
something.

I do not know French.

Bob
Post by Samuel Gougeon
Hello,
Post by rsherry8
I am trying to solve a system of two non-linear equations using
function z=g1(x,y)
z = x^2 + y^2
endfunction
function z=g2(x,y)
z = x^4 + y^4 - 20
endfunction
When I type something like: g2(2,2)
I get 12 which is right.
[xres]=fsolve([0,0],g1,g2);
If it is provided, g2() must be the jacobian of g1(): it must compute
and evaluate the partial derivatives of g1(), with respect to x and to y.
That's definitely not the case with your g2(). It should rather return
something like [2*x 2*y].
For what you likely want to do, here are two examples (extracted from
Actually, the fsolve() page is rather poor : both given examples are
about a single variable.
https://help.scilab.org/docs/6.0.1/en_US/fsolve.html
fsolve() is a key function. We should improve its help page.
HTH
Samuel
_______________________________________________
users mailing list
http://lists.scilab.org/mailman/listinfo/users
Samuel Gougeon
2018-10-16 00:14:21 UTC
Permalink
Post by Samuel Gougeon
If it is provided, g2() must be the jacobian of g1(): it must
compute and evaluate the partial derivatives of g1(), with respect to
x and to y.
That's definitely not the case with your g2(). It should rather
return something like [2*x 2*y].
I do not understand this because I am trying to solve a system of
equations and g2 represents the second equation. I suspect I am
missing something.
I do not know French.
You may mimic the given example #3. You do not need to speak french to
try and test the given code, understand, and imitate it for your own case.

BR
rsherry8
2018-10-16 00:52:49 UTC
Permalink
Thank you for your response. I am trying to solve the following system
of equations:
x^2 + y^2 = 0
x^4 + y^4 - 10 = 0

I defined the following function in SciLab:
function y=f3(x,y)
y = [x^2+y^2,x^4+y^4-10]
endfunction

That appeared to work. I found that f3(1,1) is: 2. -8.
So I then ran the following:
fsolve([0,0], f3 )
and I got:
fsolve: exception caught in 'fct' subroutine.
at line 2 of function f3
in builtin fsolve

Undefined variable: y

I then defined the function fct as follows:
function y=fct(x,y)
y = [2*x+2*y, 4*x^3+4*y^3]
endfunction

I then ran the command:
fsolve([0,0], f3, fct )
and that produced the following message:
fsolve: exception caught in 'jac' subroutine.
at line 2 of function f3
in builtin fsolve

Undefined variable: y

Any additional comments?
Thanks,
Bob
Post by Samuel Gougeon
Post by Samuel Gougeon
If it is provided, g2() must be the jacobian of g1(): it must
compute and evaluate the partial derivatives of g1(), with respect to
x and to y.
That's definitely not the case with your g2(). It should rather
return something like [2*x 2*y].
I do not understand this because I am trying to solve a system of
equations and g2 represents the second equation. I suspect I am
missing something.
I do not know French.
You may mimic the given example #3. You do not need to speak french to
try and test the given code, understand, and imitate it for your own case.
BR
_______________________________________________
users mailing list
http://lists.scilab.org/mailman/listinfo/users
Stéphane Mottelet
2018-10-16 05:44:38 UTC
Permalink
Hello,

try with

function out=f3(vect)
x=vect(1);
y=vect(2);
out = [x^2+y^2,x^4+y^4-10]
endfunction

Next time take a look at the fsolve examples !

S.
Post by rsherry8
function y=f3(x,y)
y = [x^2+y^2,x^4+y^4-10]
endfunction
Loading...