Matlab 2016b:确定表达式的未分配符号函数

Matlab 2016b: Determine unassigned symbolic functions of an expression

如何确定表达式的未分配的符号函数 (syms f(t))。排除符号数学函数 (sin,...) 和符号变量 (syms a).

例如:

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

检查符号变量

>> symvar(expr)
[ c, t]

以及如何为 未分配的符号函数

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

对于 MATLAB 2019a 及更高版本

>> X = findSymType(expr,'symfun')

X =

[ a(t), b(t)]

来自文档:

Find an unassigned symbolic function of type 'symfun' in the equation.

对于以前的 MATLAB 版本,我没有看到这样的函数。我看到的唯一选择是自己编写一个函数。

>> feval(symengine,'type',expr)

ans =

_plus

>> feval(symengine,'type',b(t))

ans =

function

>> feval(symengine,'type',sin(t))

ans =

sin

mupad 类型函数可以让您识别表达式的类型,您正在寻找 "function"。这是一些代码,它查找特定类型的所有术语:

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)