Ортонормированный базис для области значений символьной матрицы
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
использует классический алгоритм Ортогонализации Грама-Шмидта.