Python: fsolve 接近渐近区域
Python: fsolve near asymptotic region
对于 E=0.46732451
和 t=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
在[=20=之间的任意位置] 到 1
,然后弹出正确答案。我对此没有解释,也许这方面的专家可以提供帮助?
您应该改用 bisect
,因为它可以毫无问题地处理 nan
:
print bisect(fg, 0.4, 0.7, args=(1.07589765, 0.46732451))
这里以 0.4 和 0.7 为例,但您可以通过使用 0
将其概括为几乎任何发散积分,假设 1e12
作为极限。
但是,我不确定我是否理解您真正想要做的...如果您想找到积分发散的极限,请参见。你的
I am trying to solve for the upper limit of the integral
那么就是为了z_up -> \sqrt{E} \approx 0,683611374
...
因此,要找到积分的(近似)数值,您只需从该值减少 z_up
直到 quad
停止给出 nan
...
对于 E=0.46732451
和 t=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
在[=20=之间的任意位置] 到 1
,然后弹出正确答案。我对此没有解释,也许这方面的专家可以提供帮助?
您应该改用 bisect
,因为它可以毫无问题地处理 nan
:
print bisect(fg, 0.4, 0.7, args=(1.07589765, 0.46732451))
这里以 0.4 和 0.7 为例,但您可以通过使用 0
将其概括为几乎任何发散积分,假设 1e12
作为极限。
但是,我不确定我是否理解您真正想要做的...如果您想找到积分发散的极限,请参见。你的
I am trying to solve for the upper limit of the integral
那么就是为了z_up -> \sqrt{E} \approx 0,683611374
...
因此,要找到积分的(近似)数值,您只需从该值减少 z_up
直到 quad
停止给出 nan
...