2015-06-29 22 views
5

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:

error message

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!).

+0

Problem hier geöffnet: https://github.com/EconForge/NLsolve.jl/issues/19 –

Antwort

1

Ich dachte, Sie geben die Startbedingungen außerhalb der Grenzen, denn ich habe versucht mcpsolve(f!,[0.0,0.0],[0.0,0.0],[0.3, 0.3]) und es hat funktioniert.

Allerdings habe ich auch versucht, andere Kombinationen:

mcpsolve(f!,[0.4,0.4], [0.0,0.0], [0.3, 0.3]) gearbeitet hat

mcpsolve(f!,[0.4,0.4], [0.3,0.3], [1.0,1.0]) nicht

mcpsolve(f!,[0.6,0.6], [1.0,1.0], [0.3,0.3]) nicht

Haben Sie diese Werte auf Ihrem Test überprüft?