Замена элементов матрицы - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! Подскажите, кто знает, вопрос очень нужный... имеется матрица 3 столбца и неограниченное количество строк, матрицу вводит пользователь в текстбоксы (они динамические) необходимо заменить элементы строк матрицы так, чтобы сумма столбцов была максимально одинаковой. Реализовал такой алгоритм в wolfram а в c# никак не получается. Заранее огромное спасибо!

Решение задачи: «Замена элементов матрицы»

textual
Листинг программы
m = {
   {
    0.1, 0.8, 0.6
    },
   {
    1.7, 1.7, 0.008
    },
   {
    1.41, 1.19, 0.164
    },
   {
    0.18, 0.49, 0
    },
   {
    2.79, 2.79, 2.79
    },
   {
    6, 2.11, 1
    },
   {
    0.55, 1.75, 3
    },
   {
    1.1, 0, 4
    }
   };

{
   rowsN, colsN
   } = Dimensions[m];
p = Permutations[Table[Slot[n], {
     n, 1, colsN
     }]];
tP = Transpose[p];
pN = Length[p];
bVar = Table[Product[If[i == j, x[row, i], 1 - x[row, i]], {
     i, 1, pN
     }],
   {
    j, 1, pN
    }];
rowF[{
    row_
    }] = Function[Evaluate[Map[#.bVar &, tP]]];

nM = MapIndexed[rowF[#2] @@ #1 &, m];

eq = Total[
   Map[Function[Abs[Subtract @@ #]], Subsets[Map[Total, Transpose[nM]],
     {
      2
      }]]];

var = Flatten[Table[x[row, j], {
     row, 1, rowsN
     },
    {
     j, 1, pN
     }]];

conSt = And @@ Flatten[Table[{
      Sum[x[row, j], {
         j, 1, pN
         }] == 1, Table[0 <= x[row, j] <= 1, {
        j, 1, pN
        }], Table[Element[x[row, j], Integers], {
        j, 1, pN
        }]},
     {
      row, 1, rowsN
      }]];

sF = NMinimize[{
    eq, conSt
    },
   var, MaxIterations -> 500][[2]]

MatrixForm[m] 
Total /@ Transpose[%]
MatrixForm[nM /. sF]
SmP = Total /@ Transpose[%]
Total[SmP]

Оцени полезность:

8   голосов , оценка 4.125 из 5
Похожие ответы