smithForm

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

Описание

пример

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

Вызовите 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) определить полиномиальную переменную.

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

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

свернуть все

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

Матрица преобразования, возвращенная как 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