Ортонормированный базис для диапазона символьной матрицы
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 для числовых аргументов, которые не являются символическими объектами, вызывает MATLAB orth функция. Результаты, возвращенные MATLAB orth может отличаться от результатов, возвращенных orth поскольку эти две функции используют разные алгоритмы для вычисления ортонормированного базиса. Символическая математическая Toolbox™ orth функция использует классический алгоритм ортогонализации Грама - Шмидта. MATLAB orth функция использует модифицированный алгоритм Грама-Шмидта, поскольку классический алгоритм является численно нестабильным.
Используя 'skipnormalization' вычисление ортогонального базиса вместо ортогонального базиса может ускорить вычисления.
orth использует классический алгоритм ортогонализации Грама - Шмидта.