Matlab符号 - 检查函数是否可以用另一个函数表示

时间:2015-03-05 01:23:00

标签: matlab symbolic-math

在标题中解释这个有点难,所以让我说我在符号表达式中有标准的sigmoid函数及其衍生物

f = 1/(1+exp(-x))
f2 = exp(-x)/(1+exp(-x))^2

再次容易获得象征性表达。我想要的是以某种方式检查实际上f2=f1(1-f1),例如,(任何内射函数f的情况总是如此),但是自动执行此操作。

1 个答案:

答案 0 :(得分:1)

至少在这种情况下,你应该能够使用subs来做到这一点,simplify适用于表达式和变量:

syms x f1;
f = 1/(1+exp(-x))
f2 = exp(-x)/(1+exp(-x))^2
f2 = subs(f2,f,f1)

在R2014b和R2015a中返回f1^2*exp(-x)。对于更复杂的表达式,这可能不是完全健壮的,或者可能需要多次应用或与sym/isequaln一起使用。

如果您只需要比较表达式,可以使用isAlwayslimit

syms x;
f = 1/(1+exp(-x));
f2 = exp(-x)/(1+exp(-x))^2;
isequaln(f*(1-f),f2)
isAlways(f*(1-f)==f2)

但是,这两个都返回布尔false(0)。由于某些原因。这可能是一个错误,也可能是错误,因为在-Inf进行评估时,两种形式有不同的奇点。以下

syms x;
f = 1/(1+exp(-x));
f2 = exp(-x)/(1+exp(-x))^2;
subs(f2,x,-Inf)
subs(f*(1-f),x,-Inf)

分别产生NaN0。然而,在-Inf处取file a service request会产生正确的值。该文档未说明sym/isequaln和/或isAlways如何处理这种情况。对于使用The MathWorks的{{3}},这可能是个好例子。