MatLab - 使用缩放行旋转的高斯消除

时间:2012-09-05 17:44:39

标签: matlab matrix factorization

我正在尝试编写一个函数,该函数使用缩放行旋转执行高斯消除。我几乎把它弄好了,但我的答案不太正确,所以我的代码中的某些内容一定是错的。我写了:

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]

我无法看到代码中的哪个位置我做错了,所以如果有人能帮助我,我会非常感激!

0 个答案:

没有答案