このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
orth
シンボリック行列の範囲の正規直交基底
説明
例
正規直交基底の計算
次の行列の範囲の正規直交基底を計算します。これらの数値はシンボリック オブジェクトではないため、結果は浮動小数点数となります。
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
で返される行列とは異なります。これらの関数で使用されている Gram-Schmidt 直行化アルゴリズムのバージョンが異なるためです。
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]
次に、B
の各列の 2 ノルムが 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
が呼び出されます。MATLABorth
で返される結果は、orth
で返される結果と異なることがあります。この 2 つの関数では、異なったアルゴリズムを使用して正規直交基底を計算するからです。関数 Symbolic Math Toolbox™orth
では、標準の Gram-Schmidt 直交化アルゴリズムを使用します。標準のアルゴリズムは数値的に不安定であるため、MATLAB 関数orth
では修正された Gram-Schmidt アルゴリズムを使用します。'skipnormalization'
を使用して正規直交基底ではなく直交基底を計算すると、計算を高速化できます。
アルゴリズム
orth
では、標準の Gram-Schmidt 直交化アルゴリズムを使用します。
バージョン履歴
R2013a で導入