仅向矩阵的对角元素添加一个小值

bha*_*avs 0 matlab matrix matrix-inverse diagonal

我是matlab的新手,我试图找出具有非常小值的矩阵的逆.当我试图找到逆时,我得到一个错误,说矩阵是单数.建议的解决方案之一是尝试向对角线元素添加一些元素.我知道我必须使用眼睛和诊断方法,但我无法找到正确的解决方案.

任何评论都会有所帮助.

abc*_*bcd 5

如果你只是想添加的单位矩阵或它的倍数,以你的方形矩阵,你可以做

A_new = A_old + k*eye(size(A_old));
Run Code Online (Sandbox Code Playgroud)

A_old你的矩阵在哪里,k是一个倍增器.如果要为每个对角元素添加不同的值,可以执行类似的操作

A_new = A_old + diag(values);
Run Code Online (Sandbox Code Playgroud)

where values是一个向量,其元素数量与矩阵的列数(或行数)相同A_old.

如果您的矩阵很大,则使用内存效率会更高spdiags:

dim_A = size(A_old,1);
A_new = A_old + spdiags(values(:),0,dim_A,dim_A);
Run Code Online (Sandbox Code Playgroud)

或者像Amro的答案一样使用线性索引.