gpt4 book ai didi

python - sympy lambdify 运行时警告 : invalid value encountered in double_scalars

转载 作者:太空狗 更新时间:2023-10-30 01:23:31 33 4
gpt4 key购买 nike

我正在使用 sympy 和 numpy 来解决以下问题:

给定一个点 (x0, y0) 和一条曲线 y=a*x**2+b*x+c,计算 (x0, y0) 到 (x,y) 的最小距离。

from sympy.core.symbol import symbols
from sympy.solvers.solvers import solve
from sympy.utilities.lambdify import lambdify

x, y = symbols('x y')
a,b,c, x0, y0 = symbols('a b c x0 y0')
y = a*x**2 + b*x + c
dist2 = (x-x0)**2 + (y-y0)**2
sol = solve(dist2.diff(x), x)
dist2_diff_solve = lambdify( (x0,y0,a,b,c), solve(dist2.diff(x),x), modules='numpy')

到目前为止,一切都很好。我什至可以得到一些结果:

dist2_diff_solve(1, 1, 1, 1, 1)

[0.31718264650678707, (-0.9085913232533936-0.8665105933073626j),
(-0.9085913232533936+0.8665105933073626j)]

但是,对于另一组参数,我遇到了问题:

dist2_diff_solve(664515.9375, 3998106.0, 0.053674994761459802, -71340.561832823907,    23709057427.266102)

*** ValueError: negative number cannot be raised to a fractional power

我认为这是 lambdify 的一个错误,因为我可以执行以下操作:

sol[0].evalf(subs={x0:664515.9375, y0:3998106.0, a:0.053674994761459802, b:-71340.561832823907, c:23709057427.266102})
664515.759983973 + .0e-19*I

我需要 lambdify,因为我需要一次计算大量(~100K)计算(矢量化)。任何人都可以确认这是来自 lambdify 的错误吗?欢迎提出任何意见/建议。

最佳答案

我发现了一个相关问题:negative pow in python

简单的给a加上+0j就解决了这个问题,即:

dist2_diff_solve(664515.9375+0j, 3998106.0, 0.053674994761459802, -71340.561832823907, 23709057427.266102)

[(664515.7418921513+3.552713678800501e-15j), (664600.9266076663+5.329070518200751e-15j), (664564.8069210749-1.4210854715202004e-14j)]

关于python - sympy lambdify 运行时警告 : invalid value encountered in double_scalars,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12254195/

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