降低精度Sympy等价类

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了降低精度Sympy等价类相关的知识,希望对你有一定的参考价值。

我正在使用Sympy进行一些符号计算,但计算成本太高。我希望尽量减少每次计算的字节数,从而提高处理速度。我正在解决两个未知数的多项式方程,但是每当我使用Sympy等式类创建等式时,它就会引入在所提供的变量中不存在的精度。它在两端增加了额外的数字,以创建Sympy的15点精度标准。我希望有办法让这个类不这样做,或者只是限制sympy在这个问题上的整体精度,因为这个精度量对我的计算是不必要的。我读了所有能找到的关于这个类的文档,以及sympy的精度处理,但没有任何收获。我的代码是这样的。

c0=np.float16((math.cos(A))2)(a2)+(math.sin(A)2)(b2))

c1=np.float16((math.cos(A))2)(b2)+(math.sin(A)2)(a2))

c2=np.float16((math.sin(2*A))(a)2)-(math.sin(2*A))(b)2))

c3=np.float16((k*math.sin(2*A))(b)2)-(2*h*(math.cos(A))**2)(a)2)-(k*(math.sin(2*A)))(a)2)-(2*h*(math.sin(A))**2)(b)2))

c4=np.float16((h*math.sin(2*A))(b)2)-(2*k*(math.cos(A))**2)(b)2)-(h*(math.sin(2*A)))(a)2)-(2*k*(math.sin(A))**2)(a)2))

c5=np.float16((h)2*(math.cos(A))**2)(a)2)+(kh(math.sin(2*A))(a)2)+(k2*(math.sin(A))2)(a2)+(h2*(math.sin(A))**2)(b)2)+(k2*(math.cos(A))**2)(b)2)-(kh(math.sin(2*A))(b**2)-1)

x=sym.Symbol('x', real=True)

y=sym.Symbol('y', real=True)

e=sym.Eq(c0*x)2+c1*y2+c2*x*y+c3*x+c4*y+c5)

c5的每一个值最初都像python一样计算成双精度的float,因为我不需要这个精度,所以我只是把它重铸成float16。所以这些值看起来像

c0=1.547

c1=15.43

c2=1.55

c3=5.687

c4=7.345

c5=6.433

然而当抛入等式e时,方程就变成了

e=1.5470203040506025*x。2 + 15.43000345000245*y2......等等

与标准的sympy 15点精度的每个系数,即使这些数字不代表数据。我希望降低这个精度可以减少我的运行时间。我有很多这样的多项式要解。我已经尝试过使用sympy的float类,和eval函数,以及其他许多东西。如果有任何帮助,我将感激不尽。

答案

给Float作为第二个参数的重要数字的数量。

.>> from sympy import Float, Eq
>>> c0,c1,c2,c3,c4,c5 = [Float(i,4) for i in (c0,c1,c2,c3,c4,c5)]
>>> Eq(c0*x**2+c1*y**2+c2*x*y+c3*x+c4*y+c5,0)
Eq(1.547*x**2 + 1.55*x*y + 5.687*x + 15.43*y**2 + 7.345*y + 6.433, 0)

以上是关于降低精度Sympy等价类的主要内容,如果未能解决你的问题,请参考以下文章

unity 优化整理

unity 优化整理

python sympy evalf()函数

Python - 将符号表达式(sympy)写入txt文件

python3的sympy

python的第三方模块