问题描述
我的问题涉及到什么时候 当函数接近零时,它的行为会很奇怪。
设置
我试图找到以下等式的根
其中
kappa,chi,theta和alpha都是我设置的参数。的 变量k是30 x 30的网格。
我试图找到在所有k个网格点进行h评估的根。 根应返回介于0和1之间的h。 函数在增加,但在h接近零的区域(通常是 小于0.1),它将横穿x轴两次。某些情况会发生这种情况 我评估的网格点以及其他网格点都不会发生。在 理论上这不应该发生。所以当我使用 像bisect和brentq这样的二分法在大多数网格点都有效 但是对于某些人,我会得到“ f(a)和f(b)为正”的错误。
所以我改为尽量减少寻根问题 我平方函数并使用布伦特函数的问题。但我是 仍然像以前一样遇到类似的问题。但是这次 由于迭代太多而将停止,许多解决方案是 不在指定范围内。
for i in range(nk):
for j in range(nk):
def foch(n):
return (kappa*n**chi - (kgrid[i]**(alpha)*n**(1-alpha) +
(1-delta)*kgrid[i] -
kgrid[j])**(-theta)*(1-alpha)*(kgrid[i])**(alpha)*n**(-alpha))**2
res[i,j] =opt.brent(foch,brack=(10e-3,1))
问题
我怎么找到这个在理论上是唯一的方程式的根?是 有一种我可以使用的替代标准方法 寻根或最小化问题?
代码
import numpy as np
import scipy.optimize as opt
##### parameters #####
beta,alpha,delta,theta,chi = 0.988,0.321,0.013,1,0.5
#number of grid points.
nk = 30
#setting up the grid
kstar = (1/3)*(alpha/(1/beta - (1-delta)))**(1/(1 - alpha))
kmin=0.25*kstar
kmax=1.75*kstar
kgrid = np.linspace(kmin,kmax,nk)
#set ss labor hours
nstar=.2925
cstar = kstar**alpha*nstar**(1-alpha) - delta*kstar
#endogenously determine kappa
kappa=(1/nstar**chi)*cstar**(-theta)*(1-alpha)*(kstar/nstar)**alpha
#### solve ####
res=np.empty((nk,nk))
for i in range(nk):
for j in range(nk):
def foch(n):
return (kappa*n**chi - (kgrid[i]**(alpha)*n**(1-alpha) +
(1-delta)*kgrid[i] -
kgrid[j])**(-theta)*(1-alpha)*(kgrid[i])**(alpha)*n**(-alpha))**2
res[i,1))
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)