Линейные алгебраические операции

Символическая Гильбертова матрица

Следующие примеры, которые показывают, как выполнить основные линейные алгебраические операции, основаны на символьной версии гильбертовой матрицы 3 на 3.

Сгенерируйте гильбертову матрицу 3 на 3. С format short, MATLAB® печатает выход, показанный на рисунке.

H = hilb(3)
H =
    1.0000    0.5000    0.3333
    0.5000    0.3333    0.2500
    0.3333    0.2500    0.2000

Вычисленные элементы H являются числами с плавающей запятой, которые являются отношениями малых целых чисел. H - массив классов MATLAB double.

Преобразование H в символьную матрицу.

H = sym(H)
H =
[   1, 1/2, 1/3]
[ 1/2, 1/3, 1/4]
[ 1/3, 1/4, 1/5]

Символьные операции линейной алгебры

Символьные операции на H привести результаты, которые соответствуют бесконечно точной гильбертовой матрице, sym(hilb(3)), а не его приближение с плавающей точкой, hilb(3).

Найдите обратную H.

inv(H)
ans =
[   9,  -36,   30]
[ -36,  192, -180]
[  30, -180,  180]

Найдите определяющего H.

det(H)
ans =
1/2160

Можно использовать оператор обратной косой черты, чтобы решить систему одновременных линейных уравнений. Для примера решите H*x = b.

b = [1; 1; 1];
x = H\b
 x =
  3
 -24
  30

Все три результата - обратная, определяющий и решение линейной системы - являются точными результатами, соответствующими бесконечно-точной, рациональной, Гильбертовой матрице.

Арифметика переменной точности

Контрастируйте предыдущие операции с арифметикой переменной точности, используя 20 цифр точности.

digits(20)
V = vpa(H)
V =
 
[                    1.0,                    0.5, 0.33333333333333333333]
[                    0.5, 0.33333333333333333333,                   0.25]
[ 0.33333333333333333333,                   0.25,                    0.2]

Десятичные точки в представлении отдельных элементов указывают, что MATLAB использует арифметику переменной точности. Результат каждой арифметической операции округлен до 20 значащих десятичных цифр.

Инвертируйте матрицу и обратите внимание, что ошибки увеличиваются числом матричных обусловленности, которое для hilb(3) около 500.

cond(V)
ans =
 
524.0567775860608

Вычислите различие обратных значений версий с бесконечной точностью и переменной точностью.

ih = inv(H)
ih =
 
[   9,  -36,   30]
[ -36,  192, -180]
[  30, -180,  180]
iv = inv(V)
iv =
 
[   9.0,  -36.0,   30.0]
[ -36.0,  192.0, -180.0]
[  30.0, -180.0,  180.0]

Несмотря на то, что эти матрицы выглядят одинаково, вычислите различие, чтобы увидеть, что они не являются.

dhv = ih - iv
dhv =
 
[ -5.4929962552349494034e-26,  2.4556924435168009098e-25, -2.1971985020939797614e-25]
[  2.4556924435168009098e-25, -1.2666203129718236271e-24,  1.1373733422604130529e-24]
[ -2.1971985020939797614e-25,  1.1373733422604130529e-24, -1.0856745539758488233e-24]

Решить уравнение V*y = b. Ответ выглядит так же, как и решение H*x = b.

y = V\b
y =
 
   3.0
 -24.0
  30.0

Вычислим различие между x и y чтобы увидеть небольшое различие между этими двумя решениями.

x-y
ans =
 
  8.0779356694631608874e-27
 -6.4623485355705287099e-26
  7.1085833891275815809e-26

Используя vpa с digits(16) обеспечивает сопоставимую точность с использованием стандартных стандартных программ MATLAB двойной точности.

Символическое исследование сингулярного значения

Найдите значение s для H(1,1) что делает H сингулярный.

syms s
Hs = H;
Hs(1,1) = s
Z = det(Hs)
sol = solve(Z)
Hs =
[   s, 1/2, 1/3]
[ 1/2, 1/3, 1/4]
[ 1/3, 1/4, 1/5]

Z =
s/240 - 1/270

sol = 
8/9

Замените решение на s в Hs.

Hs = subs(Hs, s, sol)
Hs =
[ 8/9, 1/2, 1/3]
[ 1/2, 1/3, 1/4]
[ 1/3, 1/4, 1/5]

Проверьте, что определяющий Hs равен нулю.

det(Hs)
ans =
0

Найдите ядро пространства и пространства столбца Hs. Оба пространства нетривиальные.

N = null(Hs)
C = colspace(Hs)
N=
3/10
 -6/5
    1

C =
[     1,     0]
[     0,     1]
[ -3/10,   6/5]

Проверяйте это N находится в пустом пространстве Hs.

Hs*N
ans =
 
 0
 0
 0