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

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

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

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

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

textual
Листинг программы
  1. m = {
  2. {
  3. 0.1, 0.8, 0.6
  4. },
  5. {
  6. 1.7, 1.7, 0.008
  7. },
  8. {
  9. 1.41, 1.19, 0.164
  10. },
  11. {
  12. 0.18, 0.49, 0
  13. },
  14. {
  15. 2.79, 2.79, 2.79
  16. },
  17. {
  18. 6, 2.11, 1
  19. },
  20. {
  21. 0.55, 1.75, 3
  22. },
  23. {
  24. 1.1, 0, 4
  25. }
  26. };
  27.  
  28. {
  29. rowsN, colsN
  30. } = Dimensions[m];
  31. p = Permutations[Table[Slot[n], {
  32. n, 1, colsN
  33. }]];
  34. tP = Transpose[p];
  35. pN = Length[p];
  36. bVar = Table[Product[If[i == j, x[row, i], 1 - x[row, i]], {
  37. i, 1, pN
  38. }],
  39. {
  40. j, 1, pN
  41. }];
  42. rowF[{
  43. row_
  44. }] = Function[Evaluate[Map[#.bVar &, tP]]];
  45.  
  46. nM = MapIndexed[rowF[#2] @@ #1 &, m];
  47.  
  48. eq = Total[
  49. Map[Function[Abs[Subtract @@ #]], Subsets[Map[Total, Transpose[nM]],
  50. {
  51. 2
  52. }]]];
  53.  
  54. var = Flatten[Table[x[row, j], {
  55. row, 1, rowsN
  56. },
  57. {
  58. j, 1, pN
  59. }]];
  60.  
  61. conSt = And @@ Flatten[Table[{
  62. Sum[x[row, j], {
  63. j, 1, pN
  64. }] == 1, Table[0 <= x[row, j] <= 1, {
  65. j, 1, pN
  66. }], Table[Element[x[row, j], Integers], {
  67. j, 1, pN
  68. }]},
  69. {
  70. row, 1, rowsN
  71. }]];
  72.  
  73. sF = NMinimize[{
  74. eq, conSt
  75. },
  76. var, MaxIterations -> 500][[2]]
  77.  
  78. MatrixForm[m]
  79. Total /@ Transpose[%]
  80. MatrixForm[nM /. sF]
  81. SmP = Total /@ Transpose[%]
  82. Total[SmP]

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

8   голосов , оценка 4.125 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы