大家好,这是我为执行迭代方法(高斯赛德尔)所做的,我希望当迭代次数大于 30 时,它将停止并生成最多 30 次迭代的相应结果。但我想知道为什么输出result
如此奇怪,我尝试通过键入来检查命令窗口上的值,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]'