当我输入
时>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)
如果不同意将精确输入转换为浮点数,应该怎么做?我知道我可以输入以下内容
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上。
答案 0 :(得分:2)
无需用
包装每个数字func setCardView(view : UIView){ view.layer.masksToBounds = false view.layer.shadowOffset = CGSize(width: 0, height: 0) view.layer.shadowRadius = 2 view.layer.shadowOpacity = 0.5 }
将整个表达式包装在S('')
:
S('')
告诉他们不要将确切的输入转换为浮点
不是SymPy将1/3评估为浮点数;它的Python。在integrate(S('1/4/sin(1/3*x)'), x)
中,除了涉及sin(1/3*x)
之类的SymPy对象之前,除法1/3出现在Python级别上。
除此之外:用更加数学上自然的方式表达相同的公式,
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)
答案 1 :(得分:2)
一种选择是使用isympy -i
作为您的翻译。这将启动一个交互式SymPy会话,其中使用S
自动包装整数,这样您就不必担心划分整数了。但请注意,这只能以交互方式工作。如果要在文件中使用SymPy编写代码,建议使用S
或使用Rational
包含分割的整数。
顺便说一句,您通常可以通过以不具有integer/integer
的方式编写表达式来避免此问题。例如,您可以写1/4/sin(1/3*x)
(或1/(4*sin(x/3))
)代替1/sin(x/3)/4
。当你有一个有理数的时候,你真的需要使用S
,比如S(1)/2 + x
。