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