smithForm

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

Синтаксис

S = smithForm(A)
[U,V,S] = smithForm(A)
___ = smithForm(A,var)

Описание

пример

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

пример

[U,V,S] = smithForm(A) возвращает нормальную форму Смита A и unimodular матриц преобразования 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

Вызовите   переменную x определения smithForm  в качестве второго аргумента. В этом случае 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), чтобы определить полиномиальную переменную.

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

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

свернуть все

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

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

Матрица преобразования, возвращенная как unimodular символьная матрица. Если элементы 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