solving a nonlinear equation faster

6 vues (au cours des 30 derniers jours)
ektor
ektor le 8 Nov 2017
Dear all,
I want to solve this equation
-0.5+ 0.5*a*exp(-x-b*c) -(x-d)/e=0
where a,b,c,d are known quantities that change in each iteration of the algorithm.
So, I use the following code
x0=1;
Myfun = @(x, a, b, c,d,e) -0.5+ 0.5*a*exp(-x-b*c) -(x-d)/e;
A=fzero(@(x)Myfun(x, a, b, c,d,e),x0);
However, I noticed that this code is slow. So I tried something like
ff=0;
while abs(ff) > 0.0001
ff= -0.5+ 0.5*a*exp(-x-b*c) -(x-d)/e;
g=-0.5*a*exp(-x-b*c) -1/e ;
x = x - ff/g;
end
where g is the first derivative of the main function ff.
But I do not get similar solutions. Do you thing that the second piece of code is wrong?

Réponse acceptée

Walter Roberson
Walter Roberson le 8 Nov 2017
It has an exact solution:
lambertw((1/2)*a*e*exp(-b*c-d+(1/2)*e))+d-(1/2)*e
You will need the Symbolic Toolbox for lambertw
  2 commentaires
ektor
ektor le 8 Nov 2017
It is extremely slow in my code
Walter Roberson
Walter Roberson le 8 Nov 2017
On my system, with numeric a, b, c, d, e, it takes about 6E-5 seconds each, which is very reasonable.

Connectez-vous pour commenter.

Plus de réponses (0)

Community Treasure Hunt

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

Start Hunting!

Translated by