gpt4 book ai didi

sympy - 如何告诉 sympy 在积分中保持精确的数字?

转载 作者:行者123 更新时间:2023-12-02 03:58:09 28 4
gpt4 key购买 nike

当我打字时

>python
> from sympy import *
> x=symbols('x')
> integrate(1/4/sin(1/3*x),x)

输出是

0.375*log(cos(0.333333333333333*x) - 1) - 0.375*log(cos(0.333333333333333*x) + 1)

应该怎么做才能告诉 sympy 不要将精确输入转换为浮点?我知道我可以输入以下内容

integrate(S('1/4')/sin(S('1/3')*x),x)

现在的结果是

 3*log(cos(x/3) - 1)/8 - 3*log(cos(x/3) + 1)/8

但我想得到这个结果,而不必像上面那样用 S('') 包装每个数字。

是否需要为此导入选项或模块?

使用

>conda list sympy
sympy 1.0 py36_0

在 Linux 上。

最佳答案

without having to wrap each number with S('')

可以通过将整个表达式包装在 S('') 中来避免这种情况:

integrate(S('1/4/sin(1/3*x)'), x)

tell sympy not to convert exact input to floating point

并不是 SymPy 将 1/3 计算为 float ;它是Python。在 sin(1/3*x) 中,除法 1/3 发生在 Python 级别,然后再涉及 SymPy 对象(例如 x)。


旁白:用更数学自然的方式表达相同的公式,

integrate(1/(4*sin(x/3)), x)

根本不需要S(),因为这里没有标量除法。事实上,1/(4*sin(x/3)) 解析为

Mul(Rational(1, 4), Pow(sin(Mul(Rational(1, 3), Symbol('x'))), Integer(-1)))

1/4/sin(1/3*x) 解析为

Mul(Float('0.25', prec=15), Pow(sin(Mul(Float('0.33333333333333331', prec=15), Symbol('x'))), Integer(-1)))

关于sympy - 如何告诉 sympy 在积分中保持精确的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43088041/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com