Matlab 如何实现Neumann级数迭代以近似Ax=b?

Matlab 如何实现Neumann级数迭代以近似Ax=b?,matlab,loops,for-loop,matrix,iteration,Matlab,Loops,For Loop,Matrix,Iteration,我正在研究教科书中的MatLab问题,其中一个问题(作为Neumann级数迭代的一个示例)要求我遵循以下伪代码: INPUT: A n x n matrix, b n x 1 vector, T a positive integer OUTPUT: An approximation y of x after T iterations STEP 1: Set y = zeros(n,1) STEP 2: Set M = eye(n) - A STEP 2: For i = 1,2,...,T d

我正在研究教科书中的MatLab问题,其中一个问题(作为Neumann级数迭代的一个示例)要求我遵循以下伪代码:

INPUT: A n x n matrix, b n x 1 vector, T a positive integer
OUTPUT: An approximation y of x after T iterations

STEP 1: Set y = zeros(n,1)
STEP 2: Set M = eye(n) - A
STEP 2: For i = 1,2,...,T do STEP 3
   STEP 3: Set y = M*y + b
STEP 4: OUTPUT(y)
我试图找到T的最小值,使得向量Ay-b的绝对值中的最大项小于我设置的公差(变量e,如下所示)。然后保存T和E(Ay-b绝对值中的最大条目)


虽然我使用break语句在满足条件后结束循环的执行,但for循环并没有得到尽可能最小的T,而是通过所有迭代。我真的不知道我的循环出了什么问题。我尽可能地跟踪伪代码。任何反馈或建议都将不胜感激,请提前感谢。

您总是设置
T=T
,您可能忘记了
T
是什么

您在
neumann
函数的第5行定义
t=10000
,这不会改变,因此您的输出
t
总是
10000


相反,我假设您想要
T=ii
,因为达到阈值时,
ii
是当前时间步长。

在该代码中,当达到
中断时,函数返回,不再重复。我无法复制你说的话
function [T,E] = neumann(A,b,e)
    n = size(A);
    y = zeros(n(1,1),1);
    M = eye(n(1,1)) - A;
    t = 10000;

    for ii = 1:t
        y = M*y + b;

        if max(abs(A*y - b)) < e
            T = t;
            E = max(abs(A*y - b));
            break
        end
    end
end
A = [1.1,.2,-.2,.5;
     .2,.9,.5,.3;
     .1,0.,1.,.4;
     .1,.1,.1,1.2];
b = [1;0;1;0];

[T_2, E_2] = neumann(A,b,1e-2);
[T_4, E_4] = neumann(A,b,1e-4);
[T_6, E_6] = neumann(A,b,1e-6);
output = [T_2, E_2; T_4, E_4; T_6, E_6];