Соответствия

Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.

Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразуют Notebook MuPAD в Live скрипты MATLAB.

Линейные соответствия

Если aB, и m целые числа и (a - b)/m также целое число, затем числа a и b конгруэнтный m по модулю. Остаток от деления a/m равно остатку от деления b/m. Например, 11 ≡ 5(mod 3):

5 mod 3 = 11 mod 3

Для известных целых чисел a и m, все целые числа b, таким образом, что a ≡ b(mod m), сформируйте класс вычетов. Таким образом числа 5 и 11 принадлежат тому же классу вычетов 3 по модулю. Числа 5 + 3n, где n целое число, также принадлежите этому классу вычетов.

Предположим, вы хотите решить уравнение ax ≡ b(mod m), где aB, и m целые числа и x неизвестное целое число. Такие уравнения называются линейными уравнениями конгруэтности. Чтобы решить линейное уравнение конгруэтности, используйте numlib::lincongruence функция. Эта функция возвращает только решения x <m. Например, решите линейное уравнение конгруэтности 56x ≡ 77(mod 49):

numlib::lincongruence(56, 77, 49)

Линейное уравнение конгруэтности ax ≡ b(mod m) имеет по крайней мере одно решение если и только если параметры aB, и m удовлетворите следующему условию: b ≡ 0(mod gcd(a, m)). Если параметры линейного уравнения конгруэтности не удовлетворяют этому условию, уравнение не имеет решения. В этом случае, numlib::lincongruence возвращает FAIL:

numlib::lincongruence(56, 77, 48)

Системы линейных соответствий

Китайская теорема остатка утверждает что если целые числа mi(i = 1, ..., n) являются попарно взаимно-простыми, система n линейные соответствия x ≡ ai(mod mi) имеет решение. Числа mi(i = 1, ..., n) являются попарно взаимно-простыми если наибольший общий делитель любой пары чисел m i, m j (i ≠ j) 1. Решение уникально до множителей наименьшего общего кратного (ilcm) из m 1, m 2..., m n. Чтобы решить систему линейных уравнений конгруэтности, используйте numlib::ichrem функция:

numlib::ichrem([3, 1, 10], [6, 5, 13])

Китайская теорема остатка не утверждает, что система линейных соответствий разрешима, только если числа m 1... m n является попарно взаимно-простым. Если эти числа не являются попарно взаимно-простыми, система все еще может иметь решение. Даже если числа не являются попарно взаимно-простыми, решение все еще уникально до множителей наименьшего общего кратного (ilcm) из m 1, m 2..., m n:

numlib::ichrem([5, 7, 9, 6], [10, 11, 12, 13])

Если числа не являются попарно взаимно-простыми, система линейных соответствий не всегда имеет решение. Для неразрешимых систем, numlib::ichrem возвращает FAIL:

numlib::ichrem([5, 1, 9, 6], [10, 15, 12, 13])

Модульные квадратные корни

Вычислите модульные квадратные корни

Вычислить модульные квадратные корни x <m уравнения x2≡ a(mod m), используйте numlib::msqrts функция. Здесь целые числа a и m должно быть взаимно-простым. Например, решите уравнение конгруэтности x2≡ 13(mod 17):

numlib::msqrts(13, 17)

Если конгруэтность не имеет никаких решений, numlib::msqrts возвращает пустое множество:

numlib::msqrts(10, 17)

Если a и m не являются взаимно-простыми, numlib::msqrts ошибки:

numlib::msqrts(17, 17)
Error: Arguments must be relative prime. [numlib::msqrts]

Если numlib::msqrts не может решить конгруэтность, попытаться использовать numlib::mroots функция. Для получения дополнительной информации смотрите Общий Решатель для Соответствий.

Тесты разрешимости использования: Лежандр и символы Якоби

Символ Лежандра определяет разрешимость конгруэтности x2≡ a(mod m), где m начало. Можно вычислить символ Лежандра, только если модуль является простым числом. Следующая таблица демонстрирует зависимость между значением символа Лежандра и разрешимостью конгруэтности:

Если номер Лежандра...Конгруэтность...
1Имеет одно или несколько решений
0Не может быть решен numlib::msqrts. Попробуйте numlib::mroots.
-1Не имеет никакого решения

MuPAD® реализует символ Лежандра как numlib::legendre функция. Если, и только если, конгруэтность x2≡ a(mod m) разрешимо, символ Лежандра равен 1:

numlib::legendre(12, 13)

numlib::msqrts(12, 13)

Если, и только если, конгруэтность x2≡ a(mod m) не имеет никаких решений, символ Лежандра равен-1:

numlib::legendre(11, 13)

numlib::msqrts(11, 13)

Если a и m не являются взаимно-простыми, символ Лежандра равен 0. В этом случае, numlib::legendre функция возвращается 0, и numlib::msqrts ошибки:

numlib::legendre(13, 13)

numlib::msqrts(13, 13)
Error: Arguments must be relative prime. [numlib::msqrts]

Можно вычислить символ Лежандра, только если модуль является простым числом. Если конгруэтность имеет неглавный нечетный модуль, можно вычислить символ Якоби. Символ Якоби определяет неразрешимые соответствия x2≡ a(mod m). Вы не можете вычислить символ Якоби, если модуль является четным числом. Следующая таблица демонстрирует зависимость между значением символа Якоби и разрешимостью конгруэтности:

Если номер Якоби...Конгруэтность...
1Может иметь решения
0Не может быть решен numlib::msqrts. Попробуйте numlib::mroots.
-1Не имеет никаких решений

MuPAD реализует символ Якоби как numlib::jacobi функция. Если символ Якоби равен-1, конгруэтность не имеет решения:

numlib::jacobi(19, 21)

numlib::msqrts(19, 21)

Если символ Якоби равен 1, конгруэтность может иметь решения:

numlib::jacobi(16, 21)

numlib::msqrts(16, 21)

Однако значение, 1 из символа Якоби не гарантирует, что конгруэтность имеет решения. Например, следующая конгруэтность не имеет никаких решений:

numlib::jacobi(20, 21)

numlib::msqrts(20, 21)

Если a и m не являются взаимно-простыми, символ Якоби равен 0. В этом случае, numlib::jacobi функция возвращается 0, и numlib::msqrts ошибки:

numlib::jacobi(18, 21)

numlib::msqrts(18, 21)
Error: Arguments must be relative prime. [numlib::msqrts]

Общий решатель для соответствий

Помимо решения линейной конгруэтности или вычисления модульных квадратных корней, MuPAD также позволяет вам решить соответствия более общего типа P(x) ≡ 0(mod m). Здесь P(x) одномерный или многомерный полином. Чтобы решить такие соответствия, используйте numlib::mroots функция. Например, решите конгруэтность x3+ x2+ x + 1 ≡ 0(mod 3). Во-первых, задайте левую сторону конгруэтности как полином при помощи poly функция:

p := poly(x^3 + x^2 + x + 1)

Теперь используйте numlib::mroots функция, чтобы решить конгруэтность:

numlib::mroots(p, 299)

Используя numlib::mroots функция, также можно решить конгруэтность для многомерного полинома. Для многомерного полиномиального P( x1, ..., xn), numlib::mroots возвращает вложенный список в результате. Каждый внутренний список содержит одно решение x1, ..., xn. Например, найдите модульные корни следующего многомерного полинома:

p := poly(x^3*y^2 + x^2*y + x + y + 1):
numlib::mroots(p, 11)