Ich versuche, eine große Anzahl (50) von nichtlinearen simultanen Gleichungen in Julia zu lösen. Im Moment versuche ich nur, dass dies mit 2 Gleichungen funktioniert, um die Syntax richtig zu machen. Ich habe jedoch verschiedene Pakete/Tools ausprobiert - NLsolve, nsolve in SymPy und NLOpt in JuMP (wo ich das Ziel ignoriere) Funktion und einfach Gleichheit Einschränkungen eingeben) - ohne viel Glück. Ich denke, ich sollte mich wahrscheinlich darauf konzentrieren, dass es in einem funktioniert. Ich würde mich über jeden Rat bei der Auswahl der Pakete und wenn möglich Code freuen.Nichtlineares Gleichungssystem Julia
Hier ist, wie ich es in NLsolve (Verwendung im McPsolve-Modus, so dass ich Beschränkungen für die Variablen, die ich lösen kann - x [1] und x [2] - das sind die Arbeitslosenquoten und so zwischen Null und 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])
ich bekomme diese Fehlermeldung:
Anregungen sind sehr willkommen! Ich schätze, dass die Formeln ziemlich hässlich sind. Lassen Sie mich wissen, ob weitere Vereinfachungen hilfreich sind (ich habe es versucht!).
Problem hier geöffnet: https://github.com/EconForge/NLsolve.jl/issues/19 –