我正在尝试在 Julia 中求解大量(50)个非线性联立方程。目前,我只是尝试使用 2 个方程来使语法正确等。但是,我尝试了各种包/工具 - SymPy 中的 NLsolve、nsolve 和 JuMP 中的 NLOpt(我忽略了目标函数,只需输入等式约束)- 运气不佳。我想我可能应该专注于使其成为一体。我将不胜感激有关选择软件包以及可能的代码的任何建议。
这是我尝试在 NLsolve 中执行此操作的方法(在 mcpsolve 模式下使用它,因此我可以对要求解的变量施加约束 - x[1] 和 x[2] - 它们是失业率,因此介于零和 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])
我收到此错误消息:
非常欢迎任何建议!我很欣赏这些公式非常难看,所以如果有任何进一步的简化有帮助,请告诉我(我已经尝试过!)。