Ортонормированный базис для области значений символьной матрицы
orth(A)orth(A,'real')orth(A,'skipnormalization')orth(A,'real','skipnormalization')orth( вычисляет ортонормированный базис для области значений A)A.
orth( вычисляет ортонормированный базис с помощью действительного скалярного произведения в процессе ортогонализации.A,'real')
orth( вычисляет ненормированное ортогональное основание. В этом случае векторы, формирующие столбцы A,'skipnormalization')B, не обязательно имеют длину 1.
Вычислите ортонормированный базис области значений этой матрицы. Поскольку эти числа не являются символьными объектами, вы получаете результаты с плавающей точкой.
A = [2 -3 -1; 1 1 -1; 0 1 -1]; B = orth(A)
B =
-0.9859 -0.1195 0.1168
0.0290 -0.8108 -0.5846
0.1646 -0.5729 0.8029Теперь, преобразуйте эту матрицу в символьный объект и вычислите ортонормированный базис:
A = sym([2 -3 -1; 1 1 -1; 0 1 -1]); B = orth(A)
B = [ (2*5^(1/2))/5, -6^(1/2)/6, -(2^(1/2)*15^(1/2))/30] [ 5^(1/2)/5, 6^(1/2)/3, (2^(1/2)*15^(1/2))/15] [ 0, 6^(1/2)/6, -(2^(1/2)*15^(1/2))/6]
Можно использовать double, чтобы преобразовать этот результат в числовую форму с двойной точностью. Получившаяся матрица отличается от матрицы, возвращенной
функцией MATLAB® orth, потому что эти функции используют различные версии алгоритма Ортогонализации Грама-Шмидта:
double(B)
ans =
0.8944 -0.4082 -0.1826
0.4472 0.8165 0.3651
0 0.4082 -0.9129Проверьте, что B'*B = I, где I является единичной матрицей:
B'*B
ans = [ 1, 0, 0] [ 0, 1, 0] [ 0, 0, 1]
Теперь, проверьте, что 2-норма каждого столбца B равняется 1:
norm(B(:, 1)) norm(B(:, 2)) norm(B(:, 3))
ans = 1 ans = 1 ans = 1
Вычислите ортонормированный базис этой матрицы с помощью 'real', чтобы избежать сопряженных комплексных чисел:
syms a A = [a 1; 1 a]; B = orth(A,'real')
B = [ a/(a^2 + 1)^(1/2), -(a^2 - 1)/((a^2 + 1)*((a^2 -... 1)^2/(a^2 + 1)^2 + (a^2*(a^2 - 1)^2)/(a^2 + 1)^2)^(1/2))] [ 1/(a^2 + 1)^(1/2), (a*(a^2 - 1))/((a^2 + 1)*((a^2 -... 1)^2/(a^2 + 1)^2 + (a^2*(a^2 - 1)^2)/(a^2 + 1)^2)^(1/2))]
Вычислите ортогональное основание этой матрицы с помощью 'skipnormalization'. Длины итоговых векторов (столбцы матричного B) не требуются, чтобы быть 1
syms a A = [a 1; 1 a]; B = orth(A,'skipnormalization')
B = [ a, -(a^2 - 1)/(a*conj(a) + 1)] [ 1, -(conj(a) - a^2*conj(a))/(a*conj(a) + 1)]
Вычислите ортогональное основание этой матрицы с помощью 'skipnormalization' и 'real':
syms a A = [a 1; 1 a]; B = orth(A,'skipnormalization','real')
B = [ a, -(a^2 - 1)/(a^2 + 1)] [ 1, (a*(a^2 - 1))/(a^2 + 1)]
Вызов orth для числовых аргументов, которые не являются символьными объектами, вызывает функцию orth MATLAB. Результаты, возвращенные MATLAB, orth может отличаться от результатов, возвращенных orth, потому что эти две функции используют различные алгоритмы, чтобы вычислить ортонормированный базис. Функция orth Symbolic Math Toolbox™ использует классический алгоритм Ортогонализации Грама-Шмидта. Функция orth MATLAB использует измененный Алгоритм Грама-Шмидта, потому что классический алгоритм численно нестабилен.
Используя 'skipnormalization', чтобы вычислить ортогональное основание вместо ортонормированного базиса может ускорить ваши вычисления.
orth использует классический алгоритм Ортогонализации Грама-Шмидта.