Matlab symbolic - 检查一个函数是否可以用另一个函数表示
Matlab symbolic - check if a function can be expressed in terms of another one
在标题中解释这个有点困难,所以假设我在符号表达式及其导数中有标准的 sigmoid 函数
f = 1/(1+exp(-x))
f2 = exp(-x)/(1+exp(-x))^2
再次作为符号表达很容易获得。我想要的是以某种方式检查实际上 f2=f1(1-f1)
,例如(对于任何单射函数 f 总是如此),但自动执行此操作。
至少在这种情况下,您应该能够仅使用 subs
来做到这一点,它适用于表达式和变量:
syms x f1;
f = 1/(1+exp(-x))
f2 = exp(-x)/(1+exp(-x))^2
f2 = subs(f2,f,f1)
在 R2014b 和 R2015a returns f1^2*exp(-x)
中。对于更复杂的表达式,这可能不是完全可靠的,或者可能需要多次应用或与 simplify
.
结合使用
如果只是需要比较表达式,可以使用sym/isequaln
or isAlways
:
syms x;
f = 1/(1+exp(-x));
f2 = exp(-x)/(1+exp(-x))^2;
isequaln(f*(1-f),f2)
isAlways(f*(1-f)==f2)
但是,这两个return布尔值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
。通过 MathWorks 获得 limit
at -Inf
does yield the correct values, however. The documentation does not indicate how sym/isequaln
and/or isAlways
handle this situation. This might be a good case to file a service request。
在标题中解释这个有点困难,所以假设我在符号表达式及其导数中有标准的 sigmoid 函数
f = 1/(1+exp(-x))
f2 = exp(-x)/(1+exp(-x))^2
再次作为符号表达很容易获得。我想要的是以某种方式检查实际上 f2=f1(1-f1)
,例如(对于任何单射函数 f 总是如此),但自动执行此操作。
至少在这种情况下,您应该能够仅使用 subs
来做到这一点,它适用于表达式和变量:
syms x f1;
f = 1/(1+exp(-x))
f2 = exp(-x)/(1+exp(-x))^2
f2 = subs(f2,f,f1)
在 R2014b 和 R2015a returns f1^2*exp(-x)
中。对于更复杂的表达式,这可能不是完全可靠的,或者可能需要多次应用或与 simplify
.
如果只是需要比较表达式,可以使用sym/isequaln
or isAlways
:
syms x;
f = 1/(1+exp(-x));
f2 = exp(-x)/(1+exp(-x))^2;
isequaln(f*(1-f),f2)
isAlways(f*(1-f)==f2)
但是,这两个return布尔值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
。通过 MathWorks 获得 limit
at -Inf
does yield the correct values, however. The documentation does not indicate how sym/isequaln
and/or isAlways
handle this situation. This might be a good case to file a service request。