Я прошу прощения, мой вопрос будет многословным, потому что я просто в недоумении, как даже начать кодировать это. Псевдокодовые ответы высоко ценятся, хотя бы для того, чтобы я мог понять, как решить эту проблему (тогда я могу написать некоторый реальный код и при необходимости вернуться за помощью).
Моя проблема не столько в коде, сколько в понимании нужной мне логики (что, возможно, является более сложной частью программирования).
Неформальное объяснение моей проблемы состоит в том, что я хочу изменить матрицу A (которая оказывается разреженной) так, чтобы суммы строк равнялись суммам столбцов. Я могу сделать это, добавив к A матрицу AS, где S - матрица весов.
Формально, я хочу найти матрицу S такую, что (A + AS) ONESn = T и (t (A) + T (A) S) ONESn = T, где ONESn - это вектор единиц, который создает T, вектор суммы строк.
Вектор T задуман как камень, это текущие суммы столбцов и цель для сумм строк.
Я думаю, что я хочу решить эту проблему для каждой строки i и столбца j, где i = j. Я хочу найти сумму строки и вычислить, как далеко она находится от цели. Затем я хочу изменить каждый элемент этой строки таким образом, чтобы сумма строк равнялась цели (или была, по крайней мере, «достаточно близка», где я могу установить «достаточно близко»).
Однако это условие зависит от того, что сумма столбца j также должна равняться цели.
Как мне спроектировать логику так, чтобы я мог начать, скажем, со столбца 1 и строки 1, выяснить значения в строке 1, а затем выяснить значения столбца 1, при условии, что первая запись столбца 1 является «фиксированной» по более ранней процедуре.
После этого строка 2 должна иметь свое первое значение, «фиксированное» указанным выше, и аналогично программе теперь необходимо вычислить столбец 2 с фиксированными значениями для первых двух записей.
И так до тех пор, пока вы не доберетесь до последнего столбца и строки
Я пытался программировать градиентный спуск, но получил представление о том, как сделать градиентный спуск для столбцов итеративно зависимым от градиентного спуска для строк.
Я также работал над этим вручную (для матрицы 2x2), я могу найти ответ, но я не уверен, как мне это удалось, поэтому я изо всех сил пытаюсь его кодировать.
Предположим, что A - матрица 2x2 из [1, 2, 3, 4]. Суммы строк равны [4, 6]. Суммы столбцов [3, 7].
1 3 | 4
2 4 | 6
___
3 7
если добавить матрицу S = [1, 0, -1, 0]
1 -1
0 0
Я получаю A + S = [2, 2, 2, 4], у которого есть суммы строк [4, 6].
2 2 | 4
2 4 | 6
___
4 6
Ожидаемые результаты представляют собой матрицу (A + AS), в которой суммы строк равны суммам столбцов.
Или сообщение об ошибке "не сходится"