0

私はmatlabの初心者で、非常に小さな値を持つ逆行列を見つけようとしています。逆行列を見つけようとすると、行列が特異であるというエラーが表示されます。提案された解決策の 1 つは、対角要素にいくつかの要素を追加してみることです。eye メソッドと diag メソッドを使用する必要があることはわかっていますが、正しい解決策を見つけることができません。

どんなコメントも役に立ちます。

4

2 に答える 2

5

単位行列またはその倍数を正方行列に追加したいだけの場合は、次のことができます

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);

または、アムロの回答のように線形インデックスを使用します。

于 2011-11-04T22:36:09.300 に答える
2

正方行列の場合、次のように対角に追加できます。

[r,~] = size(M);
M(1:r+1:end) = M(1:r+1:end) + values;

どこでスカラーまたは要素valuesのベクトルにすることができますr

于 2011-11-05T02:39:25.653 に答える