solving a nonlinear equation faster
조회 수: 3 (최근 30일)
이전 댓글 표시
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?
댓글 수: 0
채택된 답변
Walter Roberson
2017년 11월 8일
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
Walter Roberson
2017년 11월 8일
On my system, with numeric a, b, c, d, e, it takes about 6E-5 seconds each, which is very reasonable.
추가 답변 (0개)
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!