Могу ли я заменить, используя символическое уравнение в 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
не то, что это ваши подводные лодки, просто в качестве примера.