exponenta event banner

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-на-n диагональной матрицей S, такой что Si, i делит Si + 1, i + 1 для всехi < n.

См. также

|

Представлен в R2015b