# solve not returning two answers

5 views (last 30 days)
Syeda Amberin on 7 Jul 2019
Commented: Syeda Amberin on 8 Jul 2019
Hi,
I have a nonlinear equation that I need to sovle for 'x'. Following is my code:
syms x q N
q=.95;
N=500;
eqn = 2*log((((N-x)/(q*N))^(N-x))*((x/((1-q)*N))^x)) == 3.841;
solx = solve(eqn, x);
I am expecting two values for 'x' but am getting just one (i.e. ~35). I am not getting the other value of 16. Also I get the following warning:
Warning: Cannot solve symbolically. Returning a numeric approximation instead.
Please tell me what I am doing wrong.
Thanks,

infinity on 7 Jul 2019
Hello,
Maybe you could try with another approach, for example,
eq = @(y)2*log((((N-y)./(q*N)).^(N-y)).*((y./((1-q)*N)).^y)) - 3.841;
fsolve(eq,[0 100])
It will give two solutions.
ans =
16.0510 35.1056
But in this case, you should be aware that if you chose different interval of solutions, for example [-100, 100] in fsolve, you may get wrong results.
##### 1 CommentShowHide None
Syeda Amberin on 8 Jul 2019
Thanks. This is helpful.

### More Answers (1)

Walter Roberson on 8 Jul 2019
When an equation is sufficiently complicated, solve cannot find all the exact solutions. Often it does not even know how to find one exact solution. In such cases, solve() uses vpasolve() to find one numeric solution.
##### 2 CommentsShowHide 1 older comment
Syeda Amberin on 8 Jul 2019
Good to know. Thanks1