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