我正试图在Julia中实施以下公式来计算工资分配的基尼系数:
哪里
这是我正在使用的代码的简化版本:
# Takes a array where first column is value of wages
# (y_i in formula), and second column is probability
# of wage value (f(y_i) in formula).
function gini(wagedistarray)
# First calculate S values in formula
for i in 1:length(wagedistarray[:,1])
for j in 1:i
Swages[i]+=wagedistarray[j,2]*wagedistarray[j,1]
end
end
# Now calculate value to subtract from 1 in gini formula
Gwages = Swages[1]*wagedistarray[1,2]
for i in 2:length(Swages)
Gwages += wagedistarray[i,2]*(Swages[i]+Swages[i-1])
end
# Final step of gini calculation …
Run Code Online (Sandbox Code Playgroud) 我想在循环的每次迭代中更改符号变量的名称,然后使用这些符号变量求解方程,例如:
using SymPy
for i in 1:5
p{i} = symbols("p"{i}, real=true,positive=true)
solve(p{i}^2-i^2)
end
Run Code Online (Sandbox Code Playgroud)
因此,我希望创建一系列标量符号变量(因为我认为不可能创建向量值符号变量),每个变量都具有不同的名称 - p1、p2、p3、p4 和 p5 - 然后使用这些在方程求解器中。然而,花括号符号似乎不适用于按照 matlab 在 julia 中命名。快速谷歌没有提出任何明显的答案。有任何想法吗?
我正试图在Julia中解决大量(50)非线性联立方程.目前我只是试图用2个方程来完成这项工作以获得正确的语法等.但是,我尝试了各种各样的软件包/工具 - NLsolve,nsolve in SymPy和NMPpt in JuMP(我忽略了目标)功能,只需输入相等的约束) - 没有太多的运气.我想我应该专注于让它在一个工作.我很感激任何关于包装选择的建议以及可能的代码.
这是我在NLsolve中尝试这样做的方法(在mcpsolve模式下使用它,所以我可以对我正在解决的变量 - x [1]和x [2] - 施加约束 - 这是失业率,因此在0和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 …
Run Code Online (Sandbox Code Playgroud) 任何人都知道NLopt是否适用于单变量优化.试图运行以下代码:
using NLopt
function myfunc(x, grad)
x.^2
end
opt = Opt(:LD_MMA, 1)
min_objective!(opt, myfunc)
(minf,minx,ret) = optimize(opt, [1.234])
println("got $minf at $minx (returned $ret)")
Run Code Online (Sandbox Code Playgroud)
但是得到以下错误消息:
> Error evaluating untitled
LoadError: BoundsError: attempt to access 1-element Array{Float64,1}:
1.234
at index [2]
in myfunc at untitled:8
in nlopt_callback_wrapper at /Users/davidzentlermunro/.julia/v0.4/NLopt/src/NLopt.jl:415
in optimize! at /Users/davidzentlermunro/.julia/v0.4/NLopt/src/NLopt.jl:514
in optimize at /Users/davidzentlermunro/.julia/v0.4/NLopt/src/NLopt.jl:520
in include_string at loading.jl:282
in include_string at /Users/davidzentlermunro/.julia/v0.4/CodeTools/src/eval.jl:32
in anonymous at /Users/davidzentlermunro/.julia/v0.4/Atom/src/eval.jl:84
in withpath at /Users/davidzentlermunro/.julia/v0.4/Requires/src/require.jl:37
in withpath at /Users/davidzentlermunro/.julia/v0.4/Atom/src/eval.jl:53
[inlined code] from /Users/davidzentlermunro/.julia/v0.4/Atom/src/eval.jl:83 …
Run Code Online (Sandbox Code Playgroud) julia ×4
sympy ×2
distribution ×1
inequality ×1
julia-jump ×1
nlopt ×1
optimization ×1
python ×1
statistics ×1