Для MATLAB 2019a и новее
>> X = findSymType(expr,'symfun')
X =
[ a(t), b(t)]
Из документации:
Найти неназначенную символику c функцию типа 'symfun' в уравнении.
Для предыдущих версий MATLAB я не вижу такой функции. Единственный вариант, который я вижу, - это написать функцию самостоятельно.
>> feval(symengine,'type',expr)
ans =
_plus
>> feval(symengine,'type',b(t))
ans =
function
>> feval(symengine,'type',sin(t))
ans =
sin
Функция типа mupad позволяет вам определить тип выражения, которое вы ищете для «функции». Вот некоторый код, который ищет все термины определенного типа:
function z=mst(x,symtype)
y=children(x);
if strcmpi(char(feval(symengine,'type',x)),symtype)
z=x;
else
z=[];
end
if ~isequal(x,y)
for ix=1:numel(y)
z=[z;mst(y(ix),symtype)];
end
end
end
пример вызова:
>> mst(expr,'function')
ans =
b(t)
a(t)
a(t)
b(t)