2

我在 Sage 中使用以下地图:

f = lambda x: sgn(x)*sgn(x);

对于x=0f(x)=1对于x!=0 ,其计算结果为f(x) = 0 ;

在符号结果中,sgn(x)^2sgn(x)^4sgn(x)^8等被视为不相等,即使它们对于x的所有值都是相等的。有没有办法可以替代类似的东西:

sgn(x)^2 == sgn(x)^4 == sgn(x)^8

对于这些关系的所有出现,以及x的所有符号值?

我可以为每个符号创建一个新的替换规则,例如

result.subs(sgn(c)^2 == sgn(c)^4).subs(sgn(d)^2 == sgn(d)^4)...

等等,但这似乎很难控制。

4

2 回答 2

2

这对我来说可能是一个愚蠢的问题......你的结果的性质是你可以考虑的吗?

sage: f(x) = sgn(x)^2
sage: f
x |--> sgn(x)^2
sage: Z = (1+f)^3
sage: Z = Z.expand()
sage: Z
x |--> sgn(x)^6 + 3*sgn(x)^4 + 3*sgn(x)^2 + 1
sage: Z.factor()
x |--> (sgn(x)^2 + 1)^3

在这种情况下,它会让你的问题变得毫无意义,希望:

sage: Z.subs(sgn(x)^2==x)
x |--> (x + 1)^3

不是说那是你的潜艇,只是作为一个例子。

于 2014-03-23T02:09:54.743 回答
1

显然,Sage 允许使用通配符代替(这是给我提示的示例)。所以我做了类似的事情:

var('a,b,c,d,e,f');
w = SR.wild(0);
result = f(a,b,c,d,e,f).subs(sgn(w)^4 == sgn(w)^2).subs(sgn(w)^8 == sgn(w)^2);

它奏效了!容易得多。

于 2014-03-23T18:32:48.577 回答