Why does Matlab substitute a number in a formula instead of solving it?
21 次查看(过去 30 天)
显示 更早的评论
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?
0 个评论
采纳的回答
Star Strider
2019-7-18
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.
syms x
f(x) = 1/(5+4*cos(x))
Out1 = f(0)
Out2 = f(1)
Out3 = vpa(f(1))
producing:
Out1 =
1/9
Out2 =
1/(4*cos(1) + 5)
Out3 =
0.1396412210276252254724967860432
1 个评论
Walter Roberson
2019-7-18
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.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Number Theory 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!