MATLAB Answers


Why does Matlab substitute a number in a formula instead of solving it?

Asked by tommytutone on 18 Jul 2019
Latest activity Commented on by Walter Roberson
on 18 Jul 2019
Using the Symbolic toolbox, Matlab seems to arbitrarily determine whether or not to return a solved value when a concrete value is substituted in a formula.
>> syms x
>> f(x) = 1/(5+4*cos(x))
>> f(0)
ans = 1/9
>> f(1)
ans = 1/(4*cos(1) + 5)
Why isn't it solving for f(1) ? I'm guessing its because I'm working symbolically, so I can substitute a second equation as x, but how I can force Matlab to return a concrete value?
EDIT: I tried double(f(1)) and that seemed to work. Would that be considered best practice here?


Sign in to comment.





1 Answer

Answer by Star Strider
on 18 Jul 2019
 Accepted Answer

The Symbolic Math Toolbox outputs its results as symbolic expressions, unless you ask it to do otherwise. (It assumes you want a symbolic result.) The double function is not always appropriate for symbolic results, since if the symbolic result contains a symbolic variable, double will throw an error.
If you want a numeric result, use the vpa() function:
syms x
f(x) = 1/(5+4*cos(x))
Out1 = f(0)
Out2 = f(1)
Out3 = vpa(f(1))
Out1 =
Out2 =
1/(4*cos(1) + 5)
Out3 =

  1 Comment

The Symbolic Toolbox tries to create closed form expressions of indefinitely precise algebraic numbers when practical. The Symbolic Toolbox works with mathematical results instead of approximations whenever it can.
If 1/(4*cos(1) + 5) "is" 0.139641221027625 then it follows that mod(1e17 * 1/(4*cos(1) + 5),1) should be 0 -- that multiplying by 10^17 should get you an exact integer. But that is clearly not true mathematically: cos(1) is mathematically an infinitely long decimal value.

Sign in to comment.