Следуйте этому примеру: предположим, что уравнения:
7 = x + 3y + 4z + 9w
12 = 4x + 2y + 3z + 7w
Есть 2 уравнения и 4 неизвестных. Вы можете установить 2 неизвестных в качестве параметров, поэтому в системе будет столько же уравнений, сколько и неизвестных:
7 - (4z + 9w) = x + 3y
12 - (3z + 7w) = 4x + 2y
Мы будем использовать x и y в качестве неизвестных. Можно решить его и оставить w и z в качестве параметров в линейном решении:
x = (22 - 3w - z)/10
y = (16 - 29w - 13z)/10
Теперь вам нужно сделать так, чтобы числители делились на 10, а знаменатель. Если есть решение, можно протестировать все параметры от 1 до 10.
В общем, вы делаете это:
- Подберите параметры так, чтобы неизвестных было столько же, сколько уравнений. Попробуйте оставить неизвестные, которые генерируют наименьшее абсолютное значение для определителя (в примере это было 10, но выбор y и z был бы лучше, так как это было бы |det|=3)
- Решите линейную систему и сгенерируйте ответ в зависимости от параметров
- Протестируйте значения параметров от 1 до абсолютного значения det (если есть решение, вы найдете его в этой точке), пока не будет целочисленное решение для всех неизвестных (поэтому вы выбираете наименьший определитель абсолютное значение) и проверьте, является ли оно положительным (это не было показано в примере).
Извините, если это грубая сила на последнем этапе, но, по крайней мере, есть возможность минимизировать диапазон теста. Может быть, мог бы быть лучший способ решить окончательную систему диофантовых уравнений, но я не знаю никакого метода.
РЕДАКТИРОВАТЬ1
Существует способ избежать перебора последней части. Опять же, в примере вы должны сделать:
22 = 3w + z (congruent, mod 10)
16 = 29w + 13z (congruent, mod 10)
Применение модуля:
2 = 3w + z (congruent, mod 10)
6 = 9w + 3z (congruent, mod 10)
Вы можете сделать систему сравнений треугольной (исключение Гаусса), умножая сравнение на обратное по модулю 10 и суммируя с другими. Обратное число 9 по модулю 10 равно -1, поэтому мы умножаем последнее сравнение:
2 = 3w + z (congruent, mod 10)
-6 = -9w + -3z (congruent, mod 10)
Эквивалентно:
2 = 3w + z (congruent, mod 10)
4 = w + 7z (congruent, mod 10)
Затем умножьте на -3 и прибавьте к первому:
2 - 3*4 = 3w + z -3w - 21z (congruent, mod 10)
4 = w + 7z (congruent, mod 10)
Эквивалентно:
-10 = -20z (congruent, mod 10)
4 = w + 7z (congruent, mod 10)
Затем вы решаете сверху вниз (этот пример кажется верным для любого значения z). Может быть некоторая степень свободы, если у вас больше параметров, чем сравнений, но они эквивалентны, и вы можете установить лишние параметры на любое значение, предпочтительно наименьшее, равное 1.
Дайте мне знать, если есть что-то еще не ясно!
person
Eduardo Poço
schedule
16.08.2016