我正在尝试解决Julia中的大量(50)非线性联立方程。目前,我只是想使用2个方程式来完成此工作,以使语法正确,等等。但是,我尝试了各种软件包/工具-NLsolve,SymPy中的nsolve和JuMP中的NLOpt(在这里我忽略了目标功能并输入平等约束)-运气不佳。我想我可能应该集中精力使它合而为一。如果您选择软件包以及可能的代码,请多多指教。

这是我尝试在NLsolve中进行操作的方式(在mcpsolve模式下使用它,以便可以对要解决的变量施加约束-x [1]和x [2]-它们是失业率,因此限制在0和1之间) :

using Distributions
using Devectorize
using Distances
using StatsBase
using NumericExtensions
using NLsolve

beta = 0.95
xmin= 0.73
xmax = xmin+1
sigma = 0.023
eta = 0.3
delta = 0.01
gamma=0.5
kappa = 1
psi=0.5
ns=50
prod=linspace(xmin,xmax,ns)
l1=0.7
l2=0.3
wbar=1
r=((1/beta)-1-1e-6 +delta)


## Test code

function f!(x, fvec)

    ps1= wbar + (kappa*(1-beta*(1-sigma*((1-x[1])/x[1]))))
    ps2= wbar + (kappa*(1-beta*(1-sigma*((1-x[2])/x[2]))))

    prod1=prod[1]
    prod2=prod[50]
    y1=(1-x[1])*l1
    y2=(1-x[2])*l2
    M=(((prod1*y1)^((psi-1)/psi))+((prod2*y2)^((psi-1)/psi)))
    K=((r/eta)^(1/(eta-1)))*M

    pd1=(1-eta)*(K^eta)*(M^(-eta))*prod1
    pd2=(1-eta)*(K^eta)*(M^(-eta))*prod2

    fvec[1]=pd1-ps1
    fvec[2]=pd2-ps2
end

mcpsolve(f!,[0.0,0.0],[1.0,1.0], [ 0.3, 0.3])

我收到此错误消息:

任何建议都非常欢迎!我知道公式很难看,因此,请让我知道进一步简化是否有用(我已经尝试过!)。

最佳答案

我以为您给的初始条件超出了范围,因为我尝试了mcpsolve(f!,[0.0,0.0],[0.0,0.0],[0.3, 0.3])并成功了。

但是,我也尝试了其他组合:
mcpsolve(f!,[0.4,0.4], [0.0,0.0], [0.3, 0.3])确实有效
mcpsolve(f!,[0.4,0.4], [0.3,0.3], [1.0,1.0])没有
mcpsolve(f!,[0.6,0.6], [1.0,1.0], [0.3,0.3])没有

您是否在测试中检查了这些值?

10-08 03:06