在Mathematica中遇到默认值时有条件地转换表达式

时间:2019-03-18 08:30:08

标签: wolfram-mathematica

假设我有一个表达式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。我不知道我的错误在哪里。

1 个答案:

答案 0 :(得分:2)

您可以使用Replace

Replace[x + x^2 + x^3, x^n_. /; n < 3 -> y^n, {1}]

levelspec {1}将替换项保留到模式为Power[x, n]的级别1(除非省略n)。如果替换级别为2,则x表达式内的Power符号将被替换,n_.默认值开始生效。 ReplaceAll/.)影响所有级别,但Replace与levelspec为{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]