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