1

スケーリングされた行のピボットでガウス消去を実行する関数を作成しようとしています。私はほとんど正しいと思いますが、私の答えは完全に正しくないため、コードに何か問題があるに違いありません。私は書いた:

function [B,h] = factorization(A)
n = length(A);
p = zeros(1,n);
s = zeros(1,n);
for i = 1:n
    p(i) = i;
    s(i) = max(abs(A(i,1:n)));
end
for k = 1:(n-1)
    m = abs(A(k:n,k));
    q = length(m);
    v = zeros(1,q);
    w = s(k:n);
    for j = 1:q
        v(j) = m(j)/(w(j));
    end
    [pivot,pivot] = max(abs(v(1:end)));
    if pivot ~= 1
        var = p(k);
        p(k) = p(pivot);
        p(pivot) = var;
    end
    for i = (k+1):n
        z = A(p(i),k)/A(p(k),k);
        A(p(i),k) = z;
        for j = (k+1):n
            A(p(i),j) = A(p(i),j) - z*A(p(k),j);
        end
    end
end
B = A;
h = p;

次に、マトリックスA = [2 3 -6; 1 -6 8; 3 -2 1]を入力として使用するとします。私のコードは私に出力を与えます: B = [0.6667 -0.8125 -0.4375; 0.3333 -5.3333 7.6667; 3 -2 1], h = [3 2 1]. ただし、正しい答えは次のとおりです。 B = [0.0007 4.3333 -6.6667; 0.3333 -1.2308 -0.5385; 3 -2 1], h = [3 1 2]

コードのどこが間違っているのかわからないので、誰かが助けてくれたら、とても感謝しています!

4

0 に答える 0