Замена элементов матрицы - 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]