数学建模社区-数学中国

标题: Lingo中如何初始化矩阵的部分量? [打印本页]

作者: bill8341    时间: 2016-3-3 17:15
标题: Lingo中如何初始化矩阵的部分量?
M 是一个二维数组,其值非负

比如M = 2 1 0
              0 3 0
              4 0 0;

现定义一3维0-1数组T,想将T中部分变量赋值为1
即M中不为0所对应的位置上的T赋值为1

比如上面的M,则
T(1,1,2) = 1;
T(1,2,1) = 1;
T(2,2,3) = 1;
T(3,1,4) = 1;

写为matlab程序可写成:
for i = 1 : 3
   for j = 1 : 3
      if M(i,j) > 0
         T(i,j,M(i,j)) = 1;
      end
   end
end

谢谢了





作者: wujianjack2    时间: 2016-3-3 18:25
  如果M是输入的常数矩阵的话,可以这样实现:
SETS:
ROW/1..3/;
COL/1..3/;
TIME/1..4/;
MULTI(ROW, COL): M;
TENSOR(ROW, COL, TIME): T;
ENDSETS
DATA:
M = 2, 1, 0, 0, 3, 0, 4, 0, 0;
ENDDATA
CALC:
@FOR(TENSOR(I, J, K):
     T(I, J, K) = 0;
     
     @IFC(M(I, J) #GT# 0:
          T(I, J, M(I, J)) = 1;
     );
);
ENDCALC
这里面用到了@IFC()段,我不太记得是在哪个版本加入的了。

输出是这样:
  Feasible solution found.
  Total solver iterations:                             0
  Elapsed runtime seconds:                          0.04

  Model Class:                                     . . .

  Total variables:                      0
  Nonlinear variables:                  0
  Integer variables:                    0

  Total constraints:                    0
  Nonlinear constraints:                0

  Total nonzeros:                       0
  Nonlinear nonzeros:                   0


                                                    Variable           Value
                                                    M( 1, 1)        2.000000
                                                    M( 1, 2)        1.000000
                                                    M( 2, 2)        3.000000
                                                    M( 3, 1)        4.000000
                                                 T( 1, 1, 2)        1.000000
                                                 T( 1, 2, 1)        1.000000
                                                 T( 2, 2, 3)        1.000000
                                                 T( 3, 1, 4)        1.000000

作者: bill8341    时间: 2016-3-4 13:47
wujianjack2 发表于 2016-3-3 18:25
如果M是输入的常数矩阵的话,可以这样实现:
SETS:
ROW/1..3/;

非常感谢!





欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5