exponenta event banner

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

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

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

Создайте матрицу Гильберта 3 на 3. С format shortMATLAB ® печатает выводимые данные.

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