matlab - 找到雅可比迭代矩阵的谱半径

标签 matlab math matrix

我正在使用 Matlab 查找雅可比迭代矩阵的谱半径,其中 A=[4 2 1;1 3 1;1 1 4]

我似乎无法输入正确的命令来获得 5 次迭代后的错误大小。有人可以帮助我吗?

以下是我到目前为止输入到 Matlab 中的命令列表:

A=[4 2 1;1 3 1;1 1 4]

A =

 4     2     1
 1     3     1
 1     1     4

 D=diagonal(diagonal(A));L=(A,-1);U=(A,1);

 b=([3 -1 4])

 x0j=zeros([0 0 0]);

 x=D\(-(U+L)*x0j+b);r=b-A*x    %Jacobi iteration.
------------------------------------------------------------------------------
 Error using  * 
 Inputs must be 2-D, o enter code here r at least one input must be scalar.
 To compute element wise TIMES, use TIMES (.*) instead.

最佳答案

spectral radius矩阵的最大值是其特征值的模数。它可以使用 max(abs(eig(·))) 简单计算。

但是,正如其他人所注意到的,您的整个代码看起来很困惑,实际上不是有效的 Matlab 代码,所以您的问题并不是真正计算光谱半径,对吗? algorithm非常简单易行:

% diagonal part of A and rest
D = diag(diag(A));
R = A - D;

% iteration matrix and offset
T = - inv(D) * R;
C = inv(D) * b;

% spectral radius condition
rho = max(abs(eig(T)));
if rho >= 1
    error('no convergence')
end

% initial guess
x = randn(size(b));

% iteration
while norm(A * x - b) > 1e-15
    x = T * x + C;
end

请注意,我使用 inv(D) 直接遵循维基百科中的描述,但是可以使用 diag(1 ./diag(D) 轻松计算对角矩阵的逆矩阵)

我真的不明白为什么需要将 R 分成上下两部分。我想这与数值效率有关,但是,Matlab 已经是一种非常高效的矩阵计算高级语言。所以实际上,当您可以简单地编写 A\b 时,实际上没有必要在其中显式地实现 Jacobi 算法——我想除了教育目的。

关于matlab - 找到雅可比迭代矩阵的谱半径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19992255/

相关文章:

r - 如何索引R矩阵而不将其恢复为向量

python - 从矩阵中获取具有最大和值的列

MATLAB:我可以以某种方式使用函数作为第一类对象吗?

c++ - 共线点 C++

c++ - 将 y=x*x 舍入到最近的

javascript - 如何在 JavaScript 计算器中处理 float ?

python - Python 中的 fitdist 和 histfit 相当于什么?

matlab - 如何矢量化此代码?

matlab - 在 matlab 中可视化大矩阵

android - 在 RenderScript 中旋转图像