如何在matlab中指定迭代的不收敛准则?

如何在matlab中指定迭代的不收敛准则?,matlab,matrix,Matlab,Matrix,大家好,这是我执行迭代法(gauss-seidel)所做的,我希望当迭代数大于30时,它将停止并生成相应的结果,最多30次迭代。但是我想知道为什么输出的结果如此奇怪,我试图通过键入x_ans(:,1)来检查命令窗口中的值,它给出了正确的值。这真的让我很沮丧,为什么生成的结果不一样。或任何其他情况或函数可用于设置不收敛条件。对每一次帮助,我们都要提前表示衷心的感谢 clear;clc A = [2 8 3 1;0 2 -1 4;7 -2 1 2;-1 0 5 2] B = [-2;4;3;5] E

大家好,这是我执行迭代法(gauss-seidel)所做的,我希望当迭代数大于30时,它将停止并生成相应的结果,最多30次迭代。但是我想知道为什么输出的
结果
如此奇怪,我试图通过键入
x_ans(:,1)
来检查命令窗口中的值,它给出了正确的值。这真的让我很沮丧,为什么生成的结果不一样。或任何其他情况或函数可用于设置不收敛条件。对每一次帮助,我们都要提前表示衷心的感谢

clear;clc
A = [2 8 3 1;0 2 -1 4;7 -2 1 2;-1 0 5 2]
B = [-2;4;3;5]
Es = 1e-5


n = length(B);
x = zeros(n,1);
Ea = ones(n,1);
iter = 0;

while max(Ea) >= Es
    if iter <= 30
        iter = iter + 1;
        x_old = x;
        for i = 1:n
           j = 1:n;
           j(i) = [];
            x_cal = x;
            x_cal(i) = [];
            x(i) = (B(i) - sum(A(i,j) * x_cal)) / A(i,i);
        end
    else
        break
    end

    x_ans(:,iter) = x;
    Ea(:,iter) =abs(( x - x_old) ./ x);

    end

result = [1:iter; x_ans; Ea]'
清晰;clc
A=[2831;022-14;7-212;-1052]
B=[-2;4;3;5]
Es=1e-5
n=长度(B);
x=零(n,1);
Ea=一(n,1);
iter=0;
而max(Ea)>=Es

如果iter我已经通过了公式,它们都是好的。顺便说一句,这个总数是不必要的。问题在于您的输入数据-尝试重新排序!例如,检查以下各项是否有效

A = [7 -2 1 2;
     2 8 3 1;
     -1 0 5 2;
     0 2 -1 4;]
B = [3;-2;5;4]

见下收敛

由于未定义所有变量,因此无法复制Th代码。一般规则是执行
清除所有
以清除所有变量并尝试运行代码。如果未定义的变量没有错误,请发布。@yuk我已经编辑了我的代码。.帮助您可以帮助我找出问题所在。.非常感谢。.您是否注意到显示的结果变量输出值已除以1.0e+043?如果你看每个迭代,结果应该与x_ans匹配。例如,看结果(1,:)@grantnz ya我想我早就知道了。谢谢