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

问题描述 投票:2回答:1

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

wolfram-mathematica
1个回答
2
投票

你可以使用Replace

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

levelspec {1}将替换为1级,其中模式为Power[x, n](除非省略n)。如果替换是在2级,x表达式中的Power符号将被替换,n_.默认发挥作用。 ReplaceAll/.)影响所有级别,但Replace与levelpec {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]
© www.soinside.com 2019 - 2024. All rights reserved.