5

Julia で多数 (50) の非線形連立方程式を解こうとしています。現時点では、構文を正しくするために 2 つの方程式を使用してこれを機能させようとしています。ただし、さまざまなパッケージ/ツールを試しました-NLsolve、SymPy の nsolve、JuMP の NLOpt (目的を無視します)機能し、等式制約を入力するだけです)-あまり運がありません。たぶん、1つで機能させることに集中する必要があると思います。パッケージの選択と、可能であればコードに関するアドバイスをいただければ幸いです。

これが私が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])

次のエラー メッセージが表示されます。

エラーメッセージ

どんな提案でも大歓迎です!式がかなり醜いので、さらに単純化が役立つかどうかを教えてください(私は試しました!)。

4

1 に答える 1