如何省略对角线上元素的行运算

时间:2019-02-06 18:52:15

标签: matlab linear-algebra

我正在尝试创建一个程序,该程序使用高斯消去法求解线性系统。该程序应包括两个部分。前进阶段和换人阶段。

现在,我正在前进阶段。但是,我想不出一种处理对角线元素的方法。

我尝试实现if语句,该语句应该对角线上元素下面的元素执行行操作。

function A = mygausselm(A) 

[m,n] = size(A); 

for k=1:n-1 %columns
    for i=1:m-1 %rows
        L = A(i+1,k)/A(k,k);
        A(i+1,:)= A(i+1,:)- L*A(k,:);

    end 
end
end 

取矩阵:

               [ 1   2  3 ]
        A=     [ 4   3  2 ]
               [ 7   5  4 ]

然后预期的输出应该在行操作之后

               [ *   *  * ]
        A=     [ 0   *  * ]
               [ 0   0  * ]

1 个答案:

答案 0 :(得分:0)

您的我索引开始错误。不要从第1行开始,而是从对角线元素k下的下一行开始:

for k=1:n-1 %columns
    for i=k+1:m %rows
        L = A(i,k)/A(k,k);
        A(i,:)= A(i,:)- L*A(k,:);
    end 
end

由于您知道在处理第k列时,第k行下的所有行的第一个(k-1)元素均为零,因此可以避免对其进行操作:

for k=1:n-1 %columns
    for i=k+1:m %rows
        L = A(i,k)/A(k,k);
        A(i,k:end)= A(i,k:end)- L*A(k,k:end);
    end 
end