Форма Смита матрицы
S = smithForm(A)
[U,V,S]
= smithForm(A)
___ = smithForm(A,var)
возвращает нормальную форму Смита квадратной обратимой матрицы S
= smithForm(A
)A
. Элементы A
должны быть целыми числами или полиномами в переменной, определенной symvar(A,1)
. Форма Смита S
является диагональной матрицей.
___ = 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