MATLAB中的高斯消除

时间:2014-03-09 02:13:34

标签: matlab matrix linear-algebra

我正在尝试使用前向消除来减少Matlab中的矩阵。到目前为止,我一直没有成功。这是我到目前为止编写的代码。 (它的形式为ax = b)

a = [4 1 -1;5 1 2;6 1 1];
b = [-2 4 6];
width = size(a,2); 
height = size(a,1);
x=1;
y=1;
i=1;

% forward elimination
for i=1 : width
    for y=2 : height
        factor = a(y,x) / a(1,x);
        for x=i : width  
            a(y,x) = a(y,x) - a(1,x) * factor;
        end
        x=1;
    end

end

这会产生这样的输出:

4.0000    1.0000   -1.0000
     0   -0.2500    3.2500
     0   -0.5000    2.5000 

所以它很接近但我在最后一行需要多一个零。任何人都可以帮忙解决这个问题吗?我很感激。

1 个答案:

答案 0 :(得分:2)

我猜你正在寻找这个:

clear all
close all

a = [4 1 -1;5 1 2;6 1 1];
b = [-2 4 6];
width = size(a,2); 
height = size(a,1);

% forward elimination
for i=1 : width
    for y=i+1 : height
        factor = a(y,i) / a(i,i);
        for x=i : width  
            a(y,x) = a(y,x) - a(i,x) * factor;
        end
    end
end

另请注意,如果a不是方形,则i位于{1,...,min(width,height)}。当您在a中进行b中的相同操作时会发生这种情况,因为a = [a,b] =增强矩阵。