children函数在Matlab中模糊地分割表达式

时间:2018-04-27 09:37:11

标签: matlab children

Matlab符号工具箱产生关于children函数的模糊答案。 假设以下示例:

>> syms a b
>> children(a+b)
  ans = [ a, b]
>> children(a*b)
  ans = [ a, b]
>> children(a^b)
  ans = [ a, b]

该函数将不同的表达式分成相同的答案,更糟糕的是,Matlab没有给出任何暗示它做了什么样的拆分。因此,需要确切地知道输入的串联以进行推理,如何应用子函数。有没有办法应用像儿童功能这样的东西让你知道这个术语是如何分裂的?

1 个答案:

答案 0 :(得分:0)

一个天真的解决方法是一个函数,它增强了matlab中的子函数。以下可能有效,但有可能并非涵盖所有情况。我愿意接受以下方面的改进:

function [childs, issum, isprod, ispow, isfun] = children2(parent)
%CHILDREN2 Returns the children plus meta info. of math. concatenation
% Author: tkorthals@cit-ec.uni-bielefeld.de
% Input
%  parent                   Symbolic expression
% Output
%  childs                   Vector of symbolic expression
%  issum                    True if parent is sum of children
%  isprod                   True if parent is product of children
%  ispow                    True if parent is power of children
%  isfun                    True if parent is some function's argument

childs = children(parent);
issum = false; isprod = false; ispow = false; isfun = false;

if numel(childs) == 1
    if ~isequaln(childs,parent) % functions were removed
        isfun = true;
    end
    return
end

if numel(childs) == 2
    if isequaln(childs(1)^childs(2),parent) % pow
        ispow = true;
        return
    elseif isequaln(childs(1)/childs(2),parent) % div
        childs = parent;
        return
    end
end

if isequaln(prod(childs),parent) % prod
    isprod = true;
    return
end

if isequaln(sum(childs),parent) % sum
    issum = true;
    return
end

error('children2: Undefined behaviour for more than two children')

end