Могу ли я заменить, используя символическое уравнение в Sage?

Я использую следующую карту в Sage:

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

который оценивается как f(x) = 0 для x=0 и f(x)=1 для x! = 0;

В символических результатах sgn (x) ^ 2, sgn (x) ^ 4 и sgn(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)...

и так далее, но это, кажется, трудно контролировать.

2 ответа

Решение

Очевидно, 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);

И это сработало! Намного легче.

Это, наверное, глупый вопрос для меня... природа вашего результата, которую вы могли бы просто учитывать?

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

не то, что это ваши подводные лодки, просто в качестве примера.

Другие вопросы по тегам