using hasSymType(expression, 'constants') returns true when no constants
古いコメントを表示
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?
採用された回答
その他の回答 (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 件のコメント
Andrew
2023 年 9 月 29 日
Walter Roberson
2023 年 9 月 29 日
移動済み: Walter Roberson
2023 年 9 月 29 日
syms a b c d s
f(s) = a*s^6 + b*s^4 + c*s + d
g(s) = a*s^6 + b*s^4 + c*s + 0
[val1, powers1] = coeffs(f(s),s)
constant_term1 = val1(powers1 == 1)
[val2, powers2] = coeffs(g(s),s)
constant_term2 = val2(powers2 == 1)
%alternative
val3 = coeffs(f(s), s, 'all')
val3(end)
val4 = coeffs(g(s), s, 'all')
val4(end)
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.
Andrew
2023 年 9 月 29 日
カテゴリ
ヘルプ センター および File Exchange で Symbolic Math Toolbox についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

