using hasSymType(expression, 'constants') returns true when no constants
2 次查看(过去 30 天)
显示 更早的评论
When trying to find if my expression has constants, hasSymType() always returns true. For example
syms s;
hasSymType(s*2,'constant')
returns true.
children() seems to separate out the terms into it's components as well. I would expect the following code to return [s*2] but it returns [s 2].
syms s;
children(s*2)
What am I missing?
0 个评论
采纳的回答
Paul
2023-9-29
Hi Andrew,
Both of those examples seem to be in accordance with doc hasSymType and children, except that children returns a cell array, not an array of sym.
syms s
hasSymType(s*2,'constant')
syms s
children(s*2)
What is the reason expect different results?
更多回答(1 个)
Walter Roberson
2023-9-29
Internally, inside the symbolic engine, s*2 is coded as a data structure
_mult(DOM_IDENT('s'), DOM_INT(2))
and taking children() of that strips off the
_mult
layer, resulting in the multiple outputs DOM_IDENT('s') and DOM_INT(2) . The interface layer knows to wrap the multiple outputs into a cell array. So the output is {s sym(2)}
2*s is not an atomic entity: it is an expression that can be decomposed into its parts. One of those parts is a constant, which is why hasType() succeeds.
4 个评论
Walter Roberson
2023-9-29
移动:Walter Roberson
2023-9-29
In the case where all of the coefficients are numeric (or convertable to double) you can use sym2poly and then look at the last entry.
另请参阅
类别
在 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!