# Solving a simple equation

37 views (last 30 days)
James on 25 May 2011
I have a function that can not be simplified further that goes something like this
0 = (1+exp(x))/(1+exp(-x))
(Simplified, my function is much longer and convoluted. The point is that I can't just write it as 'x = ...')
How can Matlab approximate this equation by choosing a good value for x? What is the command for this?

John D'Errico on 25 May 2011
If you are looking for a numerical solution, then this is a rootfinding problem. Use fzero, a tool designed to solve exactly that problem.
xfinal = fzero(@(x) (1+exp(x))./(1+exp(-x)),xstart);
You must supply a value for xstart. Better yet is if you can supply a pair of points that are known to bracket a solution.
Of course, this function has no solution, so it will always fail, but I assume that your true function does have one.
If you have truly tried to confuse things, and your real function is multi-dimensional, then you can use tools from the optimization toolbox. Here one would use fsolve.
If you are looking for a symbolic solution then solve (which requires the symbolic toolbox) is the answer.

Ben Mitch on 25 May 2011
You can solve an equation algebraically using the symbolic math toolbox, e.g. to solve x+3=0 use:
solve('x+3')
You can solve it numerically using various techniques, including the optimization toolbox, e.g. to solve x+3=0 use:
fminsearch(@(x) (x+3)^2, 0)
However, the equation you've posted has no finite solutions, which is why both of these commands generate trash:
solve('(1+exp(x))/(1+exp(-x))')
fminsearch(@(x) ((1+exp(x))/(1+exp(-x)))^2, 0)
Note that the numerical approach (the second command) does find an answer, but it's only a value of x where the equation is approximately equal to zero, and there's an infinity of them so the particular answer returned is not meaningful.