在标题中解释这个有点难,所以让我说我在符号表达式中有标准的sigmoid函数及其衍生物
f = 1/(1+exp(-x))
f2 = exp(-x)/(1+exp(-x))^2
再次容易获得象征性表达。我想要的是以某种方式检查实际上f2=f1(1-f1)
,例如,(任何内射函数f的情况总是如此),但是自动执行此操作。
答案 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
一起使用。
如果您只需要比较表达式,可以使用isAlways
或limit
:
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)
分别产生NaN
和0
。然而,在-Inf
处取file a service request会产生正确的值。该文档未说明sym/isequaln
和/或isAlways
如何处理这种情况。对于使用The MathWorks的{{3}},这可能是个好例子。