首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Stata / Mata中优化

在Stata / Mata中优化
EN

Stack Overflow用户
提问于 2015-01-15 23:08:28
回答 1查看 900关注 0票数 0

我想在Stata中用Mata命令'optimize‘写一个循环。基本语法是(在.do文件中):

代码语言:javascript
复制
mata: x=runiform(100,2)
mata: F=J(rows(x),1,3)
mata: X=J(1,2,48)
mata: I=J(rows(x),1,1)

mata:
    void mysolver(todo, p, x, X, I, F, lnf, S, H)
        {
        factor = F :* (I + x*p')
        factor_bis= factor , factor
        Cuenta = x :* factor_bis
        Final=I'*Cuenta
        vvv  = Final - X
        lnf  = (vvv*vvv')[1,1]
        }

mata:
    S = optimize_init()
    optimize_init_evaluator(S, &mysolver())
    optimize_init_evaluatortype(S, "v0")
    optimize_init_params(S, J(1,2,0.01))
    optimize_init_which(S,  "min" )
    optimize_init_argument(S, 1, x)
    optimize_init_argument(S, 2, X)
    optimize_init_argument(S, 3, I)
    optimize_init_argument(S, 4, F)
    optimize_init_tracelevel(S,"none")
    optimize_init_conv_ptol(S, 1e-16)
    optimize_init_conv_vtol(S, 1e-16)
    xx=optimize(S)

    st_matrix("param_estim",xx)

end

如何编写一个包含在循环中“optimizo”过程:

代码语言:javascript
复制
forvalues i=(1)500 {
   ..... 
   optimizo
    }

要重复500次优化吗?(在我的应用程序中,矩阵在每个周期中都会发生变化)

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2015-05-20 22:32:54

在您的主代码中,而不是下面这行

代码语言:javascript
复制
xx=optimize(S)

只需编写以下代码:

代码语言:javascript
复制
for (i = 1; i <= 500; i++) {

  [Do your matrix changes, call your optimize_init_argument commands if you need to change them]

  xx = optimize(S)
  xx
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27966470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档