当我运行下面的代码时,fminbox或Optim.autodiff函数似乎创建了一个Array {Dual {Float64},1}类型的向量,因为我收到错误" fbellmanind没有方法匹配.. .Array {双{Float64},1}&#34 ;.我已经指定函数fbellmanind接受数组{Any,1}但没有运气。有什么想法吗?
function fbargsolve(x::Vector)
fbellmanind(probc,EV,V,Ind,x,V0,VUnemp0,Vnp,Vp,q,obj,assets,EmpState,i)
fbellmanfirm(probc,poachedwage,minw,x,jfirm1,jfirm0,Ind,i)
@inbounds for ia in 1:na
Vnp[ia]=V[ia]
Indnp[ia]=Ind[ia]
firmratio[ia]=jfirm1[ia]/jfirmres[ia]
hhratio[ia]=((Vnp[ia]-VUnemp0[ia])/(Vp[ia]-VUnemp0[ia]))
end
Crit_bwr=vnormdiff(firmratio,hhratio,Inf)
return Crit_bwr
end
f=fbargsolve
df = Optim.autodiff(f, Float64, na)
x0=vec(bargwage0)
l=vec(max(reswage,minw))
u=vec(poachedwage*ones(na))
sol=fminbox(df,x0,l,u)
答案 0 :(得分:1)
请参阅Julia doc
中非常重要的段落朱莉娅的类型参数是不变的......
您至少可以遵循以下两种可能的解决方案:
1-更改您的函数声明,最好是明确使用正确的数据类型Array{Dual{Float64},1}
,但如果您喜欢通用的方式:
使用参数数据类型:
julia> function fbellmanind{T}(::Array{T,1})
"OK"
end
julia> fbellmanind(["test"])
"OK"
2-输入你的论点
julia> function fbellmanind(::Array{Any,1})
"OK"
end
julia> fbellmanind(Any["test"])
"OK"