задачка любителям подумать - нужна только голова
мутно объяснил, но в 2Д случае будет понятнее. короче вот что есть и что нужно...
дано:
матрица A (n x m), вектор B (n) и вектор С(m). известно что сумма всех элементов вектора B равна сумме всех элементов вектора С, но в общем случае не равна сумме всех элементов матрицы A.
задача построить матрицу A1, такую, что сумма всех элементов матрицы была равна сумме всех элементов вектора B и вектора C, сумма всех элементов i'ой строки матрицы А равна i'тому элементу вектора B, а j'ый столбец матрицы A равен j'тому элементу вектора С, и к тому же чтобы сумма квадратов разниц всех элементов с соответствующими элементами матрицы А1 был минимален.
если по русски, то
AAAAAAAA B - сумма всех А в строке равно элементу В
AAAAAAAA B
AAAAAAAA B
CCCCCCCC
^
сумма столбца А равна элемненту С
должна получиться матрица А1 где сумма строки равна соответствующему элеменуту В, а сумма столбца соответствующему элементу С и чтобы поверхность заданная А претерпела минимальные изменения.
вот вобщем и всё. да и самое главное - всё числа ЦЕЛЫЕ.
мне эту задачу пришлось решать в реальных условиях, я сразу сказал как понял условие - что задача не решаема, но оказывается вполне решаема и даже очень, особенно когда говорят что всем нам прийдет полный ... плохо вобщем будет всем нам за подделку данных, если мы не подадим цифры с которых мы делали отчёты... :)...
Это лечиться вовремя сделанным архивированием .))
Это есть плохо! :) Надо пользоваться системами, где подобные отчеты создать невозможно - отчет А (матрица А в твоем примере) всегда будет "биться" с отчетом В и С. Я встречал такие системы, где возможно жуткое расхождение данных, так как база данных организована криво - это типа Парус и пр. В 1С дело обстоит лучше.
А вообще, задача представляет собой ценность как математическая задача. Надо подумать...
[/QUOTE]
Вообще-то есть раздел математики, называется "линейное программирование". Там задача стоит такая же - минимизировать/максимизировать некую функцию. Но в этом случае функция нелинейная, т. е. имеем задачу нелинейного программирования. К тому же в ЛП кроме функции задается система неравенств, а тут у тебя система уравнений. Но это не так важно.
В общем, два варианта: 1. Пока возможно, решаем нашу систему из i+j уравнений (сумма A(i,j) по всем j = B(i) - i уравнений, сумма А(i,j) по всем i = C(j) - j уравнений) до предела, пока возможно, затем переходим к минимизации среднеквадратичного отклонения;
2. Ищем литературу по нелинейному программированию :)