行列とベクトルの乗算は、行列と行列の乗算よりも数値安定性が優れているため、(1) の方法がより正確であると予想されます。
より詳細には、行列とベクトルの乗算には適切な前方および後方誤差限界があります。たとえば、行列とベクトルの乗算 y = B u を使用すると、y の誤差は、単位の丸めの 2n 倍 (標準の倍精度数を使用する場合は 1e-16) に行列の最大数を掛けた B 倍によって制限されます。ベクトル u の最大数。これは前方誤差範囲です。
後方誤差限界は、計算された y が B と u の正確な積ではなく、わずかに異なる行列 B' とベクトル u の正確な積であるということです。B と B' の差は、行列 B の最大数に単位の丸めを掛けた値の 2n 倍に制限されます。
行列-行列乗算の場合、行列-ベクトル乗算の場合と同様の順方向誤差限界がありますが、適切な逆方向誤差限界はありません。
これは一般的な原則です。出力が少ない計算 (行列とベクトルの乗算など) は、出力が多い計算 (行列と行列の計算など) よりも後方安定である可能性が高くなります。
ただし、これが違いを生むかどうかは別のマトリックスです。方法 (2) は、行列-行列積に続く行列-ベクトル積により、後方安定性を回復する可能性があります。また、特定のアプリケーションでは大きな違いがない場合や、実際には方法 (2) の方が正確である場合もあります。
しかし、方法 (1) が確かに高速であり、おそらくより正確な方法であることを考えると、私は間違いなくそのオプションを選びます。
2011 年 9 月 29 日に追加:このトピックに関する私のお気に入りの情報源は Nicholas J. Higham 著、Accuracy and Stability of Numerical Algorithms、SIAM、2002 年です。線形代数。
前方誤差はかなり直感的です。B と u が正しいことがわかっている場合、関心があるのは、計算された積 B u と正確な積との差です。これは、フォワードエラー分析が教えてくれるものです。後方誤差は、行列 B が正しくない場合に発生します (誤差を犯す以前の計算の結果である場合もあれば、最終的には実験誤差またはモデリング誤差に苦しむ測定に起因する場合もあります)。B の誤差が 1e-10 で、乗算の後方誤差がこれよりも小さい、たとえば 1e-11 であるとします。これは、乗算の結果が、アルゴリズムに与えた B に対しては正しくありませんが、元の B に非常に近い別の行列 B に対しては正しいため、正しい B である可能性が同じであることを意味します。あなたがアルゴリズムに与えたB。
フォワード エラー分析とバックワード エラー分析には異なる長所があります。理想的には、アルゴリズムは適切な前方および後方エラー境界を持つ必要がありますが、これはあまり頻繁には発生しません。