如何解决SymPy-区分有些扭曲的功能
diff ( (1/2) * ( sqrt (x**2+x+1) - x ) - (4/2) * ln ( ( sqrt (x**2+x+1) - x ) +1) + (1/2) * ln (2* ( sqrt (x**2+x+1) - x ) -1) + (3/4) * (1/(2* ( sqrt (x**2+x+1) - x ) -1)) )
我正在尝试使用SymPy计算此导数
但这给了我比我想象的更复杂的表达方式。
我用手解决了一个不定积分,因此我知道了答案
应该是(sqrt(x**2+x+1)-1)/x
。
Wolfram Alpha也证实了这一点
(在WA中,只需将**
替换为^
)。
这是WA的答案(请参阅其他表格):
是否可以使用SymPy计算和简化此导数?
还是对SymPy来说太过分了?
解决方法
我可以确认答案,可以用sympy简化它,但是做到这一点并不容易:
In [90]: d = diff ( (S(1)/2) * ( sqrt (x**2+x+1) - x ) - (S(4)/2) * ln ( ( sqrt (x**2+x+1) - x ) +1) + (S(1)/2) * ln (2* ( sqrt (x**2+x+1)
...: - x ) -1) + (S(3)/4) * (1/(2* ( sqrt (x**2+x+1) - x ) -1)) )
In [91]: d
Out[91]:
⎛ 2⋅(x + 1/2) ⎞ ⎛ x + 1/2 ⎞ 2⋅(x + 1/2)
3⋅⎜- ─────────────── + 2⎟ 2⋅⎜─────────────── - 1⎟ ─────────────── - 2
⎜ ____________ ⎟ ⎜ ____________ ⎟ ____________
⎜ ╱ 2 ⎟ ⎜ ╱ 2 ⎟ ╱ 2
x + 1/2 ⎝ ╲╱ x + x + 1 ⎠ ⎝╲╱ x + x + 1 ⎠ ╲╱ x + x + 1 1
───────────────── + ───────────────────────────────── - ──────────────────────── + ──────────────────────────────── - ─
____________ 2 ____________ ⎛ ____________ ⎞ 2
╱ 2 ⎛ ____________ ⎞ ╱ 2 ⎜ ╱ 2 ⎟
2⋅╲╱ x + x + 1 ⎜ ╱ 2 ⎟ -x + ╲╱ x + x + 1 + 1 2⋅⎝-2⋅x + 2⋅╲╱ x + x + 1 - 1⎠
4⋅⎝-2⋅x + 2⋅╲╱ x + x + 1 - 1⎠
In [92]: f = sqrt(x**2 + x + 1)
In [93]: f
Out[93]:
____________
╱ 2
╲╱ x + x + 1
In [94]: d.subs(f,y)
Out[94]:
2⋅(x + 1/2) ⎛ x + 1/2⎞ ⎛ 2⋅(x + 1/2)⎞
-2 + ─────────── 2⋅⎜-1 + ───────⎟ 3⋅⎜2 - ───────────⎟
y ⎝ y ⎠ ⎝ y ⎠ 1 x + 1/2
────────────────── - ──────────────── + ─────────────────── - ─ + ───────
2⋅(-2⋅x + 2⋅y - 1) -x + y + 1 2 2 2⋅y
4⋅(-2⋅x + 2⋅y - 1)
In [95]: ratsimpmodprime(d.subs(f,y),[minpoly(f,y)]).subs(y,f)
Out[95]:
____________
╱ 2
╲╱ x + x + 1 - 1
───────────────────
x
在文档中似乎未列出ratsimpmodprime
函数,但您可以在此处看到它:
https://github.com/sympy/sympy/blob/524fa229306898fded1d477017e0a88048d88c6b/sympy/simplify/ratsimp.py#L33
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。