using hasSymType(expression, 'constants') returns true when no constants
Mostrar comentarios más antiguos
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?
Respuesta aceptada
Más respuestas (1)
Walter Roberson
el 29 de Sept. de 2023
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 comentarios
Andrew
el 29 de Sept. de 2023
Walter Roberson
el 29 de Sept. de 2023
Movida: Walter Roberson
el 29 de Sept. de 2023
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
el 29 de Sept. de 2023
Movida: Walter Roberson
el 29 de Sept. de 2023
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
el 29 de Sept. de 2023
Categorías
Más información sobre Assumptions en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

