私はmatlabの初心者で、非常に小さな値を持つ逆行列を見つけようとしています。逆行列を見つけようとすると、行列が特異であるというエラーが表示されます。提案された解決策の 1 つは、対角要素にいくつかの要素を追加してみることです。eye メソッドと diag メソッドを使用する必要があることはわかっていますが、正しい解決策を見つけることができません。
どんなコメントも役に立ちます。
私はmatlabの初心者で、非常に小さな値を持つ逆行列を見つけようとしています。逆行列を見つけようとすると、行列が特異であるというエラーが表示されます。提案された解決策の 1 つは、対角要素にいくつかの要素を追加してみることです。eye メソッドと diag メソッドを使用する必要があることはわかっていますが、正しい解決策を見つけることができません。
どんなコメントも役に立ちます。
単位行列またはその倍数を正方行列に追加したいだけの場合は、次のことができます
A_new = A_old + k*eye(size(A_old));
A_old
あなたの行列はどこにあり、k
いくつかの乗数です。各対角要素に異なる値を追加したい場合は、次のようにすることができます
A_new = A_old + diag(values);
wherevalues
は、行列の列 (または行) の数と同じ数の要素を持つベクトルA_old
です。
行列が大きい場合は、次のように使用するとメモリ効率が向上しますspdiags
。
dim_A = size(A_old,1);
A_new = A_old + spdiags(values(:),0,dim_A,dim_A);
または、アムロの回答のように線形インデックスを使用します。
正方行列の場合、次のように対角に追加できます。
[r,~] = size(M);
M(1:r+1:end) = M(1:r+1:end) + values;
どこでスカラーまたは要素values
のベクトルにすることができますr