# Matlab solver for natural log equation

2 views (last 30 days)
Shane Palmer on 20 Nov 2020
Edited: Walter Roberson on 20 Nov 2020
Hello,
I thought this was a simple solver equation, I know I am doing something wrong, because the result should be about S=1429.
This is my code:
syms x
eqn = log(0.5) == (-27109/x)-0.95*log(x)+25.18
S = vpasolve(eqn,x)
Matlab gives me a very large S =672919621689.2986708066438355574
What am I doing wrong here?

John D'Errico on 20 Nov 2020
Edited: John D'Errico on 20 Nov 2020
Does a solution near(er) to zero exist? PLOT IT!!!!!!
syms x
f = (-27109/x)-0.95*log(x)+25.18 - log(0.5);
fplot(f,[10,1000]) Do you see anything strange? A solution would correspond to a point where that curve crosses the line y == 0. Looking a little further up, we finally see this:
fplot(f,[200,1e4])
yline(0); So a solution seems to occur near x == 1500.
S = vpasolve(f,x,1500)
S =
1428.9171626682572235629898202448
However, it you look further out, the curve reaches a peak, and then starts to drop again. It may well cross zero again out there.
fplot(f,[10000,1e6])
yline(0); Did you tell vpasolve which root it should find? Should it know?
vpasolve is a numerical root finder. It looks for a root, near where you tell it to look. If you don't tell it where, it picks a spot. And sometimes, it may end up converging to a solution you don't like.

#### 1 Comment

Shane Palmer on 20 Nov 2020

Walter Roberson on 20 Nov 2020
Edited: Walter Roberson on 20 Nov 2020
Q = @sym; %convert to rational
syms x
eqn = log(Q(0.5)) == (-Q(27109)/x)-Q(0.95)*log(x)+Q(25.18)
eqn = S = solve(eqn,x)
S = vpa(S)
ans = You can see from this that there are two solutions. You could use an initial value in vpasolve to get the other one