【问题标题】:rounding part of a sympy expression舍入同情表达式的一部分
【发布时间】:2021-04-22 22:13:57
【问题描述】:

我有一个包含 sin 和 cos 的 sympy 符号表达式。在代码的末尾,我使用了 lambdify((Phi),function(Phi))(phi) 但由于角度相关性由几个 pi 值组成,因此我得到了许多非零值,因为 sin(pi) 没有'不完全返回 0。如果可能的话,我想做的是在仍然以符号形式进行舍入。像sin(phi).round(5) 这样的东西,其中 phi 只是一个符号,因此当您将表达式和 sub 放入 phi 的值时,sin 的结果会自动四舍五入为 5d.p。有什么办法吗?

谢谢

【问题讨论】:

    标签: rounding sympy lambdify


    【解决方案1】:

    您可以使用floor 函数象征性地舍入到小数点后 5 位:

    In [14]: f = floor(100000*x) / 100000
    
    In [15]: lambdify(x, f)(0.123456789)
    Out[15]: 0.12345
    

    【讨论】:

    • 一直在弄乱代码并检查了文档,其中提到它给出了最接近的非更大整数。例如 floor(-1e-16) 给出 -1 而不是 0。 floor 函数也会导致所有正 sin 值为 0,而负 sin 值为 -1,这不是我想要的。我只是想对值进行四舍五入。因此,使用 floor 函数我得到了 floor(sin(np.pi))=floor(sin(np.pi/2))=0floor(sin(-np.pi))=floor(sin(-np.pi/2))=-1 这让事情变得比以前更糟。
    • round(x) 或多或少与floor(x + 1/2) 相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    • 2021-12-21
    • 2013-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多