我试图用Sympy解一组非线性方程组。这是我的代码,更改了一些数字,只有一个输入值(实际代码运行了170000行数据):
import sympy as sp
K0 = 2.00*10**-4
x2, y2 = sp.symbols('x2, y2')
x0 = 500
y0 = 500
R1 = ((x2 - x0)**2 + (y2 - y0)**2)**0.5
R2 = K0 * R1
H2 = sp.atan(R2 * (x2 - x0)/R1)
V2 = sp.atan(R2 * (y2 - y0)/R1)
x, y = sp.symbols('x, y')
x0 = 1.0
y0 = 2.0
x = R1 * H2
y = R1 * V2
dat = sp.nsolve([x - x0, y - y0], [x2, y2], [512, 512]) # This line is the problem
print "dat = %f, %f" % (dat[0], dat[1])
纯粹使用Python,代码运行良好并产生良好的输出,但速度非常慢。为了加快这个过程,我使用Cython编译了一个带有完全相同代码的.pyx文件(在定义中,def test()
),但是在运行时我遇到了:
我已经把问题缩小到x - x0
和{
您可以将
sympy.lambdify
与SciPy的解算器一起使用。如果速度不够快,可以使用symengine.Lambdify
。在正确地获得函数签名,并导出Jacobian,需要您跳出重重障碍。如果您想使用我为其编写的库pyneqsys:
如果这17万个解包含逐渐变化的参数,
pyneqsys
可以利用这一点(通过在解之间传播解作为猜测)。它还可以通过设置环境变量SYM_BACKEND=sympysymengine
自动使用symengine.Lambdify
相关问题 更多 >
编程相关推荐