有界根查找函数的替代方法

问题描述

我的问题涉及到什么时候 当函数接近零时,它的行为会很奇怪。

设置

我试图找到以下等式的根

其中

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 (将#修改为@)