# Finding close-to-linear solution

2 views (last 30 days)

Show older comments

I am using fsolve within fsolve. The most time spent in my code is on the inner fsolve function which matlab calls 1.5 million times.

The inner function that needs to be solved is as follows:

function F = solveE(E,c)

F = E - log(c'*exp(0.99*E));

Here, E is an Nx1 vector and c is an NxN matrix. N is typically around 400. Values for c are all positive and real. Values for E are negative and real. Is there a faster way of solving this?

Within the outer fsolve, I call this function using

E0 = fsolve(@(E) solveE(E,c),E0,options);

One thing I am already doing is to use my solution E0 as an initial guess for the next iteration (when matlab adjusts its guess for the variable that solves the outer fsolve, which then will change the value for c).

Thanks for any suggestions.

##### 0 Comments

### Accepted Answer

Matt J
on 16 May 2022

Edited: Matt J
on 16 May 2022

Pre-transpose c before the optimization to avoid repeatng the tranpose every iteration.

ct=c';

function outer(p,ct)

E0 = fsolve(@(E) solveE(E,ct),E0,options);

end

Also, for the inner problem, supply the Jacobian of F,

options.SpecifyObjectiveGradient=true;

E0 = fsolve(@(E) solveE(E,ct),E0,options);

function [F,J] = solveE(E,ct)

N=length(ct);

expE=exp(0.99*E)';

tmp=ct*expE(:);

F = E - log(tmp);

if nargout>1

J=eye(N)-0.99*(ct.*expE)./tmp;

end

end

##### 7 Comments

### More Answers (1)

Catalytic
on 16 May 2022

Edited: Catalytic
on 16 May 2022

Using fsolve inside of fsolve is a doubtful-sounding thing to do. Why not just combine the equations from solveE with the equations in your outer problem and solve a single system?

As a simpler example, instead of having something like this as your equation function...

function F=Equations(x,z0)

z=fsolve(@(z) z^3-x, z0);

F(1)=x+1-z;

end

...it is probably better to have this

function F=Equations(xz)

x=xz(1); z=xz(2);

F(1)=z^3-x;

F(2)=x+1-z;

end

##### 5 Comments

Matt J
on 17 May 2022

Edited: Matt J
on 17 May 2022

### See Also

### Categories

### Community Treasure Hunt

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

Start Hunting!