python - Sympy Subs 在更换电源时不更换符号
问题描述
我正在尝试做一些基本的替换,但 SymPy 不想帮助我
x, y, z, k = symbols("x y z k", positive=True, real=True)
exp = x**4 + x**3 + x**2 + x
what_im_expecting = simplify(y**(Rational(1/4)) + y**(Rational(3/4)) + sqrt(y) + y)
what_i_actually_get = exp.subs(x**4,y)
exp, what_i_actually_get, what_im_expecting
返回
x + y**(Rational(3, 4)) + sqrt(y) + y
谁能帮我吗?
一个更复杂的例子:
解决方案
subs
可以信任该方法来替换与给定“旧”表达式完全匹配的术语,x**4
此处为。其他相关的东西的替换x**4
就不是那么确定了。(subs 有很多未解决的问题:有人说它替代了太多,有人说它太少了。)powers有一些特定的替代逻辑,但x
它本身并不是正式的power,因此它避开了这种逻辑。解决方法:暂时替换x
为x**1
,防止自动评估该权力到x
.
x1 = sp.Pow(x, 1, evaluate=False)
subbed = exp.subs(x, x1).subs(x**4, y).subs(x1, x)
现在subbed
是y**(3/4) + y**(1/4) + sqrt(y) + y
。
但是,不要指望subs
. 使用相同的解决方法,尝试执行以下操作会subs(x**4 - 1, y)
导致x**3 + x**2 + x + y + 1
: 没有类似sqrt(y+1)
, 等出现。最好以最直接的方式替换:
subs(x, (y+1)**Rational(1, 4))
然后,您不需要任何解决方法。
推荐阅读
- r - How to draw values lower than ... in pie chart?
- wpf - 将 UI 直接绑定到 API 模型
- python - '>=' not supported between instances of 'datetime.datetime' and 'datetime.time'
- java - Why only the last value is set during copy of excel content?
- excel - Import multiple csv files to specific sheets in a workbook
- ajax - Get the value of response outside the callback function
- c# - Value entered int the first column cell of Data Grid should be populated in other columns of the same cell using WPF
- java - What's the difference between mockitoSession and MockitoAnnotations.initMocks
- python - 根据日期值向月份列添加值
- wordpress - wordpress 网站上 xmlhttprequest 的低速