0

こんにちは、これは私が反復法(ガウスザイデル)を実行するために行ったことであり、反復回数が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]'
4

1 に答える 1