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)
如何确定表达式的未分配的符号函数 (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)