gcd

GCD чисел и полиномов

Описание

пример

G = gcd(A) находит наибольший общий делитель всех элементов A.

пример

G = gcd(A,B) находит наибольший общий делитель A и B.

пример

[G,M] = gcd(A) возвращает GCD G всех элементов A, и возвращается в M линейная комбинация A что равняется G.

пример

[G,C,D] = gcd(A,B,X) находит наибольший общий делитель A и B, а также возвращает коэффициенты Безу, C и D, таким образом G = A*C + B*D. Для многомерных выражений задайте полиномиальную переменную X таким образом, что он не появляется в знаменателе C и D. Если вы не задаете X, затем gcd использует переменную по умолчанию, определенную как symvar.

Примеры

Наибольший общий делитель четырех целых чисел

Чтобы найти наибольший общий делитель из трех или более значений, задайте эти значения в качестве символьного вектора или матрицы.

Найдите наибольший общий делитель из этих четырех целых чисел, заданный как элементы массива символьного вектора.

A = sym([4420, -128, 8984, -488])
gcd(A)
A =
[ 4420, -128, 8984, -488]
 
ans =
4

Кроме того, задайте эти значения как элементы массива символьной матрицы.

A = sym([4420, -128; 8984, -488])
gcd(A)
A =
[ 4420, -128]
[ 8984, -488]
 
ans =
4

Наибольший общий делитель полиномов

Найдите наибольший общий делитель одномерных и многомерных полиномов.

Найдите наибольший общий делитель этих одномерных полиномов.

syms x
gcd(x^3 - 3*x^2 + 3*x - 1, x^2 - 5*x + 4)
ans =
x - 1

Найдите наибольший общий делитель этих многомерных полиномов. Поскольку существует более двух полиномов, задайте их как элементы массива символьного вектора.

syms x y
gcd([x^2*y + x^3, (x + y)^2, x^2 + x*y^2 + x*y + x + y^3 + y])
ans =
x + y

Наибольший общий делитель рациональных чисел

Наибольший общий делитель рациональных чисел a1,a2,... является числом g, таким образом g/a1,g/a2,... являются целыми числами и gcd(g/a1,g/a2,...) = 1.

Найдите наибольший общий делитель этих рациональных чисел, заданный как элементы массива символьного вектора.

gcd(sym([1/4, 1/3, 1/2, 2/3, 3/4]))
ans =
1/12

Наибольший общий делитель комплексных чисел

gcd вычисляет наибольший общий делитель комплексных чисел по Гауссовым целым числам (комплексные числа с целочисленными вещественными и мнимыми частями). Это возвращает комплексное число с положительной вещественной частью и неотрицательной мнимой частью.

Найдите наибольший общий делитель этих комплексных чисел.

gcd(sym([10 - 5*i, 20 - 10*i, 30 - 15*i]))
ans =
5 + 10i

Наибольший общий делитель элементов матриц

Для векторов и матриц, gcd находит наибольшие общие делители поэлементно. Нескалярные аргументы должны иметь одинаковый размер.

Найдите наибольшие общие делители для элементов этих двух матриц.

A = sym([309, 186; 486, 224]);
B = sym([558, 444; 1024, 1984]);
gcd(A,B)
ans =
[ 3,  6]
[ 2, 32]

Найдите наибольшие общие делители для элементов матрицы A и значение 200. Вот, gcd расширяет 200 в 2-by- 2 матрица со всеми элементами, равными 200.

gcd(A,200)
ans =
[ 1, 2]
[ 2, 8]

GCD является положительной линейной комбинацией входов

Теорема в теории чисел утверждает, что GCD из двух чисел является наименьшей положительной линейной комбинацией этих чисел. Покажите, что GCD является положительной линейной комбинацией для 64 и 44.

A = sym([64 44]);
[G,M] = gcd(A)
G =
4
M =
[ -2, 3]
isequal(G,sum(M.*A))
ans =
  logical
   1

Коэффициенты Безута

Найдите наибольший общий делитель и коэффициенты Безу этих полиномов. Для многомерных выражений используйте третий входной параметр, чтобы задать полиномиальную переменную. При вычислении коэффициентов Bézout, gcd гарантирует, что полиномиальная переменная не появится в их знаменателях.

Нахождение наибольшего общего делителя и коэффициентов Безу этих полиномов относительно переменной x.

[G,C,D] = gcd(x^2*y + x^3, (x + y)^2, x)
G =
x + y
 
C =
1/y^2
 
D =
1/y - x/y^2

Нахождение наибольшего общего делителя и коэффициентов Безу тех же полиномов относительно переменной y.

[G,C,D] = gcd(x^2*y + x^3, (x + y)^2, y)
G =
x + y
 
C =
1/x^2
 
D =
0

Если вы не задаете полиномиальную переменную, то тулбокс использует symvar для определения переменной.

[G,C,D] = gcd(x^2*y + x^3, (x + y)^2)
G =
x + y
 
C =
1/y^2
 
D =
1/y - x/y^2

Решение диофантового уравнения

Решение диофантового уравнения, 30x + 56y = 8, для x и y.

Найдите наибольший общий делитель и пару коэффициентов Безута для 30 и 56.

[G,C,D] = gcd(sym(30),56)
G =
2
 
C =
-13
 
D =
7

C = -13 и D = 7 удовлетворить тождества Безута, (30*(-13)) + (56*7) = 2.

Перепишите тождества Безу так, чтобы она больше напоминала исходное уравнение. Сделайте это путем умножения на 4. Использование == чтобы убедиться, что обе стороны уравнения равны.

isAlways((30*C*4) + (56*D*4) == G*4)
ans =
  logical
   1

Вычислим значения x и y которые решают диофантово уравнение.

x = C*4
y = D*4
x =
-52
 
y =
28

Входные параметры

свернуть все

Входное значение, заданное как число, символьное число, переменная, выражение, функция или вектор или матрица из чисел, символьных чисел, переменных, выражений или функций.

Входное значение, заданное как число, символьное число, переменная, выражение, функция или вектор или матрица из чисел, символьных чисел, переменных, выражений или функций.

Полиномиальная переменная, заданная как символьная переменная.

Выходные аргументы

свернуть все

Наибольший общий делитель, возвращенный как символьное число, переменная, выражение, функция или вектор или матрица символьных чисел, переменных, выражений или функций.

Линейная комбинация входов, которая равна GCD входов, возвращается как символьный вектор, матрица или массив.

Коэффициенты Bézout, возвращенные в виде символьных чисел, переменных, выражений, функций или векторов или матриц символьных чисел, переменных, выражений или функций.

Совет

  • Вызов gcd для чисел, которые не являются символическими объектами, MATLAB® gcd функция.

  • MATLAB gcd функция не принимает рациональные или сложные аргументы. Чтобы найти наибольший общий делитель рациональных или комплексных чисел, преобразуйте эти числа в символические объекты с помощью sym, а затем использовать gcd.

  • Нескалярные аргументы должны иметь одинаковый размер. Если один входной параметр нескаляр, то gcd расширяет скаляр в вектор или матрицу того же размера, что и нескалярный аргумент, со всеми элементами, равными соответствующему скаляру.

См. также

Введенный в R2014b
Для просмотра документации необходимо авторизоваться на сайте