Matlab 2016b: определение неназначенных символов c функций выражения - PullRequest
2 голосов
/ 09 января 2020

как определить неназначенные символы c функции (syms f(t)) выражения. За исключением символов c математических функций (sin, ...) и символов c переменных (syms a).

Например:

syms a(t) b(t) c
expr = a(t)*diff(b, t) + c*diff(a,t)^2 + sin(c*pi)*cos(b);

проверка символов c переменных

>> symvar(expr)
[ c, t]

и как это сделать для неназначенных символов c функций

>> XXXXX(expr)
[ a(t), b(t), diff(a, t), diff(b, t)]
% or
[ a(t), b(t)]
% or
[ a, b]

1 Ответ

2 голосов
/ 09 января 2020

Для 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)
...