hermiteForm

Гермитовая форма матрицы

Описание

пример

H = hermiteForm(A) возвращает Hermite normal форму матрицы A. Элементы A должны быть целыми числами или полиномами в переменной, определяемой symvar(A,1). Форма Гермита H является верхней треугольной матрицей.

пример

[U,H] = hermiteForm(A) возвращает Hermite нормальную форму A и матрицу юнимодулярного преобразования U, таким образом H = U*A.

пример

___ = hermiteForm(A,var) принимает, что элементы A являются одномерными полиномами в заданной переменной var. Если A содержит другие переменные, hermiteForm рассматривает эти переменные как символьные параметры.

Можно использовать входной параметр var в любом из предыдущих синтаксисов.

Если A не содержит var, затем hermiteForm(A) и hermiteForm(A,var) возвращает различные результаты.

Примеры

Форма Гермита для матрицы целых чисел

Найдите форму Гермита обратной гильбертовой матрицы.

A = sym(invhilb(5))
H = hermiteForm(A)
A =
[    25,   -300,    1050,   -1400,    630]
[  -300,   4800,  -18900,   26880, -12600]
[  1050, -18900,   79380, -117600,  56700]
[ -1400,  26880, -117600,  179200, -88200]
[   630, -12600,   56700,  -88200,  44100]
 
H =
[ 5,  0, -210, -280,  630]
[ 0, 60,    0,    0,    0]
[ 0,  0,  420,    0,    0]
[ 0,  0,    0,  840,    0]
[ 0,  0,    0,    0, 2520]

Форма Гермита для матрицы одномерных полиномов

Создайте матрицу 2 на 2, элементы которой являются полиномами переменной x.

syms x
A = [x^2 + 3, (2*x - 1)^2; (x + 2)^2, 3*x^2 + 5]
A =
[   x^2 + 3, (2*x - 1)^2]
[ (x + 2)^2,   3*x^2 + 5]

Найдите форму Гермита этой матрицы.

H = hermiteForm(A)
H =
[ 1, (4*x^3)/49 + (47*x^2)/49 - (76*x)/49 + 20/49]
[ 0,            x^4 + 12*x^3 - 13*x^2 - 12*x - 11]

Форма Гермита для матрицы многомерных полиномов

Создайте матрицу 2 на 2, которая содержит две переменные: x и y.

syms x y
A = [2/x + y, x^2 - y^2; 3*sin(x) + y, x]
A =
[      y + 2/x, x^2 - y^2]
[ y + 3*sin(x),         x]

Найдите форму Гермита этой матрицы. Если вы не задаете полиномиальную переменную, hermiteForm использует symvar(A,1) и таким образом определяет, что полиномиальная переменная x. Потому что 3*sin(x) + y не является полиномом в x, hermiteForm выдает ошибку.

H = hermiteForm(A)
Error using mupadengine/feval (line 163)
Cannot convert the matrix entries to integers or univariate polynomials.

Найдите форму A Hermite указание, что все элементы A являются полиномами в переменной y.

H = hermiteForm(A,y)
H =
[ 1, (x*y^2)/(3*x*sin(x) - 2) + (x*(x - x^2))/(3*x*sin(x) - 2)]
[ 0,     3*y^2*sin(x) - 3*x^2*sin(x) + y^3 + y*(- x^2 + x) + 2]

Форма Гермита и матрица преобразования

Найдите форму Гермита и соответствующую матрицу преобразования для обратной гильбертовой матрицы.

A = sym(invhilb(3));
[U,H] = hermiteForm(A)
U =
[ 13,  9,  7]
[  6,  4,  3]
[ 20, 15, 12]
 
H =
[ 3,  0, 30]
[ 0, 12,  0]
[ 0,  0, 60]

Проверьте, что H = U*A.

isAlways(H == U*A)
ans =
  3×3 logical array
     1     1     1
     1     1     1
     1     1     1

Найдите форму Гермита и соответствующую матрицу преобразования для матрицы полиномов.

syms x y
A = [2*(x - y), 3*(x^2 - y^2);
     4*(x^3 - y^3), 5*(x^4 - y^4)];
[U,H] = hermiteForm(A,x)
U =
[                   1/2,  0]
[ 2*x^2 + 2*x*y + 2*y^2, -1]
 
H =
[ x - y,         (3*x^2)/2 - (3*y^2)/2]
[     0, x^4 + 6*x^3*y - 6*x*y^3 - y^4]

Проверьте, что H = U*A.

isAlways(H == U*A)
ans =
  2×2 logical array
     1     1
     1     1

Если вы задаете переменную для целочисленной матрицы

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

A = [9 -36 30; -36 192 -180; 30 -180 180]
A =
     9   -36    30
   -36   192  -180
    30  -180   180

Звонить hermiteForm определение переменной x как второй аргумент. В этом случае, hermiteForm принимает, что элементы A являются одномерными полиномами в x.

syms x
hermiteForm(A,x)
ans =
     1     0     0
     0     1     0
     0     0     1

Звонить hermiteForm без определения переменных. В этом случае, hermiteForm лечит A как матрица целых чисел.

hermiteForm(A)
ans =
     3     0    30
     0    12     0
     0     0    60

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

свернуть все

Входная матрица, заданная как символьная матрица, элементами которой являются целые числа или одномерные полиномы. Если элементы A содержат более одной переменной, используйте var аргумент для задания полиномиальной переменной и обработки всех других переменных как символьных параметров. Если A многомерен, и вы не задаете var, затем hermiteForm использует symvar(A,1) для определения полиномиальной переменной.

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

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

свернуть все

Эрмитовая нормальная форма входа матрицы, возвращенная как символьная матрица. Гермитова форма матрицы является верхней треугольной матрицей.

Матрица преобразования, возвращенная как юнимодулярная символьная матрица. Если элементы A являются целыми числами, затем элементами U также являются целыми числами и det(U) = 1 или det(U) = -1. Если элементы A являются полиномами, затем элементами U являются одномерными полиномами и det(U) является константой.

Подробнее о

свернуть все

Эрмитовая нормальная форма

Для любого квадрата n n матрицей A с целочисленными коэффициентами, там существует n n матрицей H и n матрицей <reservedrangesplaceholder7> unimodular U, такой, что A * U = H, где H Эрмит нормальная форма A. Юнимодулярная матрица является действительной квадратной матрицей, такой что ее определяющий равен 1 или -1. Если A является матрицей полиномов, то определяющий U является константой.

hermiteForm возвращает Hermite нормальную форму несингулярной целочисленной квадратной матрицы, A как верхняя треугольная матричная H, так что Hjj0 и Hjj2<HijHjj2 для j>i. Если A не квадратная матрица или сингулярная матрица, H матрицы является просто верхней треугольной матрицей.

См. также

|

Введенный в R2015b