2015-06-29 19 views
5

Tôi đang cố giải quyết một số lớn (50) phương trình đồng thời phi tuyến tính trong Julia. Hiện tại tôi chỉ đang cố gắng thực hiện công việc này với 2 phương trình để có được cú pháp đúng. Tuy nhiên, tôi đã thử nhiều gói/công cụ khác nhau - NLsolve, nsolve trong SymPy và NLOpt trong JuMP (nơi tôi bỏ qua mục tiêu và chỉ cần nhập các ràng buộc bình đẳng) - không có nhiều may mắn. Tôi đoán tôi có lẽ nên tập trung vào làm cho nó hoạt động trong một. Tôi đánh giá cao bất kỳ lời khuyên nào về lựa chọn gói và nếu có thể mã. Đây là cách tôi đã cố gắng làm điều đó trong NLsolve (sử dụng nó trong chế độ mcpsolve vì vậy tôi có thể áp đặt các ràng buộc về các biến mà tôi đang giải - x [1] và x [2] - đó là tỷ lệ thất nghiệp và bị ràng buộc giữa zero và 1):Hệ phương trình phi tuyến tính của phương trình Julia

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]) 

tôi nhận được thông báo lỗi này:

error message

Bất kỳ gợi ý là rất đáng hoan nghênh! Tôi đánh giá cao các công thức là khá xấu xí vì vậy hãy cho tôi biết nếu có bất kỳ đơn giản hơn nữa hữu ích (tôi đã cố gắng!).

+0

Sự cố được mở tại đây: https://github.com/EconForge/NLsolve.jl/issues/19 –

Trả lời

1

Tôi nghĩ bạn đã đưa ra các điều kiện ban đầu ngoài phạm vi giới hạn, vì tôi đã thử mcpsolve(f!,[0.0,0.0],[0.0,0.0],[0.3, 0.3]) và hoạt động.

Tuy nhiên, tôi cũng đã cố gắng kết hợp khác:

mcpsolve(f!,[0.4,0.4], [0.0,0.0], [0.3, 0.3]) đã làm việc

mcpsolve(f!,[0.4,0.4], [0.3,0.3], [1.0,1.0]) không

mcpsolve(f!,[0.6,0.6], [1.0,1.0], [0.3,0.3]) không

Bạn đã kiểm tra các giá trị trong bài kiểm tra của bạn?

Các vấn đề liên quan