Замена элементов матрицы - 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]
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д