Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.
Если a
, b
и 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)
, где a
, b
и m
являются целыми числами, и x
является неизвестным целым числом. Такие уравнения называются линейными уравнениями конгруэтности. Чтобы решить линейное уравнение конгруэтности, используйте функцию numlib::lincongruence
. Эта функция возвращает только решения x <m. Например, решите линейное уравнение конгруэтности 56x ≡ 77(mod 49)
:
numlib::lincongruence(56, 77, 49)
Линейный ax ≡ b(mod m)
уравнения конгруэтности имеет по крайней мере одно решение, если и только если параметры a
, b
и 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)