smithForm

Форма Смита матрицы

Описание

пример

S = smithForm(A) возвращает нормальную форму Смита квадратной инвертируемой матрицы A. Элементы A должны быть целыми числами или полиномами в переменной, определяемой symvar(A,1). Форма Смита S является диагональной матрицей.

пример

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

пример

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

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

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

Примеры

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

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

A = sym(invhilb(5))
S = smithForm(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]
 
S =
[ 5,  0,   0,   0,    0]
[ 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]

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

S = smithForm(A)
S =
[ 1,                                 0]
[ 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]

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

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

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

S = smithForm(A,y)
S =
[ 1,                                                     0]
[ 0, 3*y^2*sin(x) - 3*x^2*sin(x) + y^3 + y*(- x^2 + x) + 2]

Матрицы формы и преобразования Смита

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

A = sym(invhilb(3));
[U,V,S] = smithForm(A)
U =
[  1,  1, 1]
[ -4, -1, 0]
[ 10,  5, 3]
 
V =
[ 1, -2, 0]
[ 0,  1, 5]
[ 0,  1, 4]
 
S =
[ 3,  0,  0]
[ 0, 12,  0]
[ 0,  0, 60]

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

isAlways(S == U*A*V)
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,V,S] = smithForm(A,x)
U =
[ 0,                        1]
[ 1, - x/(10*y^3) - 3/(5*y^2)]
 
V =
[ -x/(4*y^3), - (5*x*y^2)/2 - (5*x^2*y)/2 - (5*x^3)/2 - (5*y^3)/2]
[  1/(5*y^3),                               2*x^2 + 2*x*y + 2*y^2]
 
S =
[ x - y,                             0]
[     0, x^4 + 6*x^3*y - 6*x*y^3 - y^4]

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

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

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

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

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

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

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

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

smithForm(A)
ans =
     3     0     0
     0    12     0
     0     0    60

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

свернуть все

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

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

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

свернуть все

Нормальная форма Смита входа матрицы, возвращенная как символьная матрица диагонали. Первый диагональный элемент делит второй, второй делит третий, и так далее.

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

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

Подробнее о

свернуть все

Нормальная форма Смита

Нормальная форма Смита матрицы n -by n A является n -by n диагональной матрицей S, такой чтоSi,i делится Si+1,i+1 для всех i < n.

См. также

|

Введенный в R2015b