C ++ эффективно проверяет существование положительного целочисленного решения системы линейных уравнений

Я столкнулся с проблемой, которая опередила и мой ограниченный талант, и мою способность найти библиотеку, которая сделает это (и что я могу понять документацию). По сути, учитывая матрицу A, мне нужно проверить, существует ли положительное целочисленное решение системы AX = 0, для X вектор.

Еще несколько специфических особенностей: коэффициенты в A всегда будут равны -1, 0, 1 или 2 (и в большинстве случаев равны нулю, с не более чем тремя ненулевыми коэффициентами в каждом уравнении), система почти всегда будет занижена. Системы будут небольшими — вероятно, не более двадцати уравнений с, возможно, 30 неизвестными, но код будет вызываться значительное количество раз, поэтому скорость решения систем с малыми числами важнее, чем масштабирование для больших матриц.

Мне кажется, что должен быть очень быстрый способ проверки, учитывая, насколько ограничена проблема, но я совершенно не смог ее найти. Эйгену и Лапаку не хватает соответствующих функций (что я могу найти — они, кажется, делают только решения методом наименьших квадратов для недостаточно определенных систем, в то время как мне требуется положительное решение). Нечто подобное lsqnonneg из MATLAB будет работать по-своему, но я понятия не имею, как реализовать что-то подобное в C ++.

1

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]