fsolve

7 views (last 30 days)
gianluca
gianluca on 12 Dec 2011
Hi,
I'm solving a system of two non linear equations involving the same number of variables. I'm using the command fsolve, so before I've defined my functions:
function F = eqns(x)
F = [x(1).*A + (1-x(1)).*x(2).*B + (1-x(1)).*(1-x(2)).*C - b1;
x(1).*D + (1-x(1)).*x(2).*E + (1-x(1)).*(1-x(2)).*F - b2]
and save it as nle.m. A,B,C,D,E,F are constant values and b1 and b2 are my own data stored in two vectors in the workspace.
The command
x0 = [0 0];
[x,toll] = fsolve(@nle,x0)
solve my system only if I write the values of b1 and b2 in the equations defined into the m-file. Since I've thousand of b1 and b2 pairs, I would that fsolve find the zero capturing the current values of b1 and b2 from the workspace. How can I do this?
Thanks for the help

Accepted Answer

Titus Edelhofer
Titus Edelhofer on 12 Dec 2011
Hi,
add the b1, b2 to the function as variables:
function F = eqns(x, b1, b2)
F = ...
and call pass your b1, b2 to the call for fsolve:
b1 = 42;
b2 = 1;
fun = @(x) nle(x, b1, b2);
[x,toll] = fsolve(fun, x0);
Titus
  5 Comments
gianluca
gianluca on 12 Dec 2011
Hi,
this is the nle.m file:
function F = eqns(x,b1,b2)
F = [x(1).*0+(1-x(1)).*x(2).*30+(1-x(1)).*(1-x(2)).*150-b1;
x(1).*189+(1-x(1)).*x(2).*55.5+(1-x(1)).*(1-x(2)).*89.9-b2];
In the command windows:
b1 = CGR1;
b2 = S;
fun = @(x) nle(x, b1, b2);
[x,toll] = fsolve(fun, x0);
where CGR1 and S are the vector of size (28721 x 1).
I attach yuo a little part of the CGR1 and S vectors (e.g. 10 rows):
CGR1 = [37.6 38.6 39.7 40.7 41.8 42.8 43.9 44.9 46.0 47.1]
S = [67.4 67.7 67.9 68.1 68.3 68.5 68.7 69.0 69.2 77.3]
Titus Edelhofer
Titus Edelhofer on 14 Dec 2011
Hi,
you need to put the call to fsolve into the loop as I did above.
Titus

Sign in to comment.

More Answers (0)

Categories

Find more on Programming in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!