getVariables method
Retrieves the base variables present in the expression, effectively
decomposing composite variables into their constituent parts.
For instance, for an expression containing x^2
, it returns x
, and
for x*y
, it returns both x
and y
.
Returns: A Set containing all distinct base Variable objects found in the expression.
Implementation
Set<Variable> getVariables() {
Set<Variable> variables = {};
void extractBaseVariables(Expression expr) {
if (expr is Variable) {
if (expr.toString().contains('^')) {
var v = expr.toString().split('^');
extractBaseVariables(Pow(Expression.parse(v[0].substring(1)),
Expression.parse(v[1].substring(0, v[1].length - 1))));
} else if (expr.toString().contains('*')) {
var components = expr.toString().split('*');
for (var i = 0; i < components.length - 1; i++) {
for (var j = i + 1; j < components.length; j++) {
var leftComponent = Expression.parse(
components[i].trim().replaceAll(RegExp(r'^\(|\)$'), ''));
var rightComponent = Expression.parse(
components[j].trim().replaceAll(RegExp(r'^\(|\)$'), ''));
extractBaseVariables(Multiply(leftComponent, rightComponent));
}
}
} else {
variables.add(expr);
}
} else if (expr is BinaryOperationsExpression) {
extractBaseVariables(expr.left);
extractBaseVariables(expr.right);
} else if (expr is UnaryExpression) {
extractBaseVariables(expr.operand);
} else if (expr is TrigonometricExpression) {
extractBaseVariables(expr.operand);
}
}
extractBaseVariables(this);
return variables;
}