編集:
@yoda と @morispaa に感謝します。あなたはどちらも正しく、@morispaaのソリューションは機能します。つまり、 Zがまたがる空間に関する仮定に基づく変換された係数の私の処理、およびZベクトルの順序と「方向」は、更新すると正しい結果をレンダリングしますRの対角要素が正の要素を持つように、 Qの列の符号を変更します。
私が取り組んでいる変換の詳細については、こちらをお読みください。以下のZ = サンプリングされたゼルニケ多項式。これは、離散ケース (私たちのケース) で直交または完全ではないことが知られています。
@morispaa によって提案されたソリューションが機能する理由についての直感。それについてあなたの意見を聞きたいです:
私の直感では、Rの実数の非負の対角線を何らかの形で適用すると、基底QがZのベクトルと「一致する」ようになり(前に述べたように、ユニタリではありません)、したがって以下のオプション 1 と 2 が得られるということです。それらは異なる変換を表していますが、出力係数はおそらく同様の空間にあります。
より具体的には、Zは「ほぼ」ユニタリであり、これによりQR分解がZに十分近い基底を返すようになるのではないでしょうか? そうして初めて、 Zのベクトルの詳細に関する仮定に基づく変換された係数の処理が、 Qの対角が完全に正の場合は機能するが、負のエントリがある場合は機能しないと想像できます。どう思いますか?
バックグラウンド
MATLAB R2011aとR2010bの両方がマシンにインストールされています。
R2010bからR2011aへの変更の 1 つは、の実装に影響しますqr()
(この特定の変更に関するリリース ノートはこちらを参照してください)。
qr()
私のプロジェクトが直接および逆変換の直交基底を推定するために使用するものの重要な部分。私のコードは、この変換を入力信号に適用し、変換された係数を処理して、処理された信号を返します。つまり、R2011aで行われた変更によりqr()
、この変換の係数を処理するブロックが機能しなくなります (逆変換は、処理された信号の期待される逆変換を返しません)。
どういうわけか、現在返されているQマトリックスはqr()
、変換された係数の処理が適切に機能しないという点で、古いバージョンとは異なります。
最初の質問
以上のことから、 R2010bからR2011aを使用するように指示することは可能ですか?qr()
2 番目の質問
QとQ'を使用して、直接変換と逆変換を計算します。詳細はこちらでご覧いただけます。より具体的には、y = Q * xとx = Q' * yを使用して、それぞれ直接変換と逆変換を計算します。直接変換を計算する別の方法は、最小二乗法を使用することです。つまり、次の 2 つのオプションがあります。
オプション 1: QR 因数分解を使用した直接および逆変換:
% Direct:
[Q R] = qr(Z);
y = Q' * x;
% Some processing of the y coefficients
% ...
% Inverse:
x = Q*y;
オプション 2: 最小二乗フィッティングによる直接変換と逆変換
% Direct:
y = Z \ x;
% Some processing of the y coefficients
% ...
% Inverse:
x = Z*y;
変数は次のとおりです。
% x = Input vector
% y = Direct transformation of x
% Z = Matrix with sampled basis
R2011a では、上記のオプション 1が機能しなくなりました ( R2010bでは機能します)。直接変換と逆変換に使用するというアイデアが本当に気に入っていqr()
ます (すべての新しいベクトルの最小二乗を計算するよりもはるかに高速です)。私のプロジェクトに新しいものを使用したい場合、私の変換を新しいQqr()
で再び機能させる方法を知っている人はいますか?