我很难理解数据透视是如何在这段代码中实现的。有人能解释一下部分回转是如何在这里实现的吗?
% 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