繁体   English   中英

Python:在渐近区域附近求解

[英]Python: fsolve near asymptotic region

对于E=0.46732451t=1.07589765我试图求解积分t = \\ int_ {0} ^ {z} 1 / sqrt(2 *(0.46732451-z ** 2))的上限,我对此进行了绘制功能,看起来像这样 相对于

t=1左右逐渐渐近。

我有以下代码

import numpy as np
from scipy import integrate
from scipy.optimize import fsolve

def fg(z_up,t,E):
      def h(z,E):
           return 1/(np.sqrt(2*(E-z**2)))

      b, err = integrate.quad(h, 0, z_up,args=(E)) 
      return b-t 



x0 = 0.1
print fsolve(fg, x0, args=(1.07589765, 0.46732451))[0]

但是,无论我输入什么内容,此代码都只会输出猜测值,因此我猜测它与那里的曲线渐近有关。 我应该注意,此代码适用于t其他值,这些值远离渐近区域。

谁能帮我解决这个问题?

谢谢

编辑玩了一会儿之后,我解决了这个问题,但这有点像是拼凑而成,它只适用于一般情况下的类似问题(不是吗?)

我进行了如下修改:使最大值z能达到是sqrt(0.46732451)所以设置x0=0.5*np.sqrt(0.46732451)并设置factor之间的任何地方0.11 ,取出这个正确的答案。 我对此没有任何解释,也许有人在这方面是专家可以提供帮助吗?

您应该改用bisect ,因为它可以毫无问题地处理nan

print bisect(fg, 0.4, 0.7, args=(1.07589765, 0.46732451))

这里以0.4和0.7为例,但是您可以使用0并以1e12作为极限值,将其推广到几乎所有发散积分。

但是,我不确定我是否真正了解您要做什么...如果您想找到积分发散的极限,请参见。 你的

我正在尝试求解积分的上限

那么它仅适用于z_up -> \\sqrt{E} \\approx 0,683611374 ...因此,要找到积分的(近似)数值,您只需要从该值中z_up ,直到quad不再给出nan ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM