Eviews 高手请进(找出1,0,-1的对应组合问题)
我用Eviews编写一段程序:
程序首先自动产生一个1,0,-1序列(共!t个1,0或-1,具体!t值在运行前给定, 因为每次运行时要设定不同的!t值).
然后我要找出所有的!t个1,0或-1组合 (共3的!t次方个) 中, 有至少M(M<!t, 通过!track的值设定)个1,0或-1与程序自动产生的那个序列中的1,0,-1一一对应的那些组合. 将这些组合放到一个group中.
我编写的程序如下, 用了!t个循环, 切实可行, 可是当我设定!t到20以上时, 这段代码的运行效率就太低. 计算机要很多天连续运行.
请高手指教, 如何编写当!t值大于20时效率高一点的程序? 如果有疑问之处, 敬请指出, 我再作解释. 谢谢!
!t = 10 !track = 0.90 create u 1 !t series markt = 2*@round(rnd) - 1 stom(markt,vecmarkt) group success !i = 0 !n = 0 for !v1 = -1 to 1 step 1 for !v2 = -1 to 1 step 1 for !v3 = -1 to 1 step 1 for !v4 = -1 to 1 step 1 for !v5 = -1 to 1 step 1 for !v6 = -1 to 1 step 1 for !v7 = -1 to 1 step 1 for !v8 = -1 to 1 step 1 for !v9 = -1 to 1 step 1 for !v10 = -1 to 1 step 1 !n = !n + 1 rowvector(!t) strat!n = na for !pos = 1 to !t strat!n(!pos) = !v{!pos} next scalar ergeb!n = @inner(strat!n,vecmarkt) if ergeb!n >= 2*!track*!t - !t then
(解释一下这里:在我的程序中, 我计算每一个组合和程序自动产生的那个序列的内积(ergeb!n), 然后判断ergeb!n是否大于或等于 2*!track*!t - !t. 当!track=0.90, !t=10时, 2*!track*!t - !t=8, 此时找出3的10次方个1,0或-1组合有至少有8个与程序自动产生的那个序列中的1或-1对应的那些组合) mtos(strat!n, res!n) success.add res!n !i = !i + 1 endif delete ergeb!n strat!n next next next next next next next next next next freeze(strattable) success.table