Скажем, у меня есть выражение x + x^2 + x^3
, и я хочу заменить x
на y
, когда мощность x
меньше максимальной степени, ниже мой код в Mathematica:
x + x^2 + x^3 /. x^n_. /; n < 3 -> y^n
Но результат y + y^2 + y^3
вместо y + y^2 + x^3
. Я не знаю, где моя ошибка.
Вы можете использовать Replace
Replace[x + x^2 + x^3, x^n_. /; n < 3 -> y^n, {1}]
Спецификация уровней {1}
содержит замену на уровне 1, где шаблон равен Power[x, n]
(если только n
не опущен). Если замена находится на уровне 2, символы x
внутри выражения Power
заменяются, и в игру вступают n_.
значения по умолчанию. ReplaceAll
(/.
) влияет на все уровни, но Replace
с указанием уровня {1}
делает свое дело.
Без n_.
по умолчанию требуется дополнительное правило.
Replace[x + x^2 + x^3, {x^n_ /; n < 3 -> y^n, x -> y}, {1}]
Инвертирование основного правила позволяет использовать ReplaceAll
x + x^2 + x^3 /. {x^n_ /; n >= 3 -> x^n, x -> y}
Альтернативным методом было бы использование Piecewise
Piecewise[{{y + y^2 + x^3, n < 3}}, x + x^2 + x^3]
Спасибо большое. Я понимаю. Шаблон по умолчанию представляет собой замену x->y и влияет на все уровни, что имеет смысл. Поэтому я бы лучше рассматривал x->y как дополнительную замену вместо использования шаблона по умолчанию.