利用部分枢轴的高斯消元matlab代码



我很难理解数据透视是如何在这段代码中实现的。有人能解释一下部分回转是如何在这里实现的吗?

% PARTIAL PIVOTING
for k = 1:n
i = k;
for j = i+1:n
if(M(j, i) > M(i, j))
i = j;
end
end
if(k ~= i)
M([k i], :) = M([i k], :);
end

我认为这不是完整的代码。

它基本上是在当前行下面查找具有最大值的行(尽管在比较中应该使用绝对值(。我不确定你不理解哪一部分,但我相信这可能是一条线:

M([k i], :) = M([i k], :);

这一行只是交换行k和i;

temp=M(i,:)
M(i,:)=M(k,:);
M(k,:)=temp;

在这一行之后,您需要进行行缩减。

请参阅下面的matlab中的完整高斯消除代码(仅简化为上三角形式(;

function a = gauss_pivot(a)
[m,~] =size(a);
for i=1:m-1
%find pivot position 
pivot_pos = find(max(abs(a(i:end,i)))==abs(a(i:end,i)),1)+i-1;  % the 1 in find is 
%to return a single row
%swap row
if(pivot_pos ~= i)
a([i, pivot_pos],:)=a([pivot_pos,i],:);
end
%reduce row
a(i+1:end,i:end)=a(i+1:end,i:end)-a(i,i:end).*a(i+1:end,i)/a(i,i);
end
end

最新更新