gCD

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

Синтаксис

G = gcd(A)
G = gcd(A,B)
[G,M] = gcd(A)
[G,C,D] = gcd(A,B,X)

Описание

пример

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, и также возвращает коэффициенты Bézout, 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

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

Наибольший общий делитель рациональных чисел, a1,a2,... является номером g, такой, что g/a1,g/a2,... является целыми числами и gcd(g) = 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]

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

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

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

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

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

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

Найдите наибольший общий делитель и коэффициенты Bézout этих полиномов относительно переменной 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

Найдите наибольший общий делитель и коэффициенты Bézout тех же полиномов относительно переменной 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.

Найдите наибольший общий делитель и пару коэффициентов Bézout для 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.

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

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

Смотрите также

Введенный в R2014b