如何省略对角线元素的行操作
How can I omit a row-operation for elements in the diagonal
我正在尝试创建一个使用高斯消元求解线性系统的程序。该计划应由两部分组成。前锋阶段和后场换人阶段。
现在我正在研究前进阶段。但是,我想不出一种处理对角线元素的方法。
我已经尝试实现 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 * ]
你的 i 索引开始错误。不要从第 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
我正在尝试创建一个使用高斯消元求解线性系统的程序。该计划应由两部分组成。前锋阶段和后场换人阶段。
现在我正在研究前进阶段。但是,我想不出一种处理对角线元素的方法。
我已经尝试实现 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 * ]
你的 i 索引开始错误。不要从第 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