% 全主元高斯消去法
% 如果输入不符合唯一解的要求则会报错
function x = gasuss_allmax(A,d)
zg = [A, d];
n = length(d);
x_index = 1:n;
for i = 1:n-1
[value_max,row_index] = max(abs(zg(i:n,i:n))); % 最大值所在行,输出为包含每一列的最大值的行向量
[~, col_index] = max(value_max); % 最大值在第几列。
row = row_index(col_index)+i-1; % 行号
col = col_index+i-1; % 列号
zg([i,row],:) = zg([row,i],:); % 交换行
zg(:,[i,col]) = zg(:,[col,i]); % 交换列
x_index([col,i]) = x_index([i,col]);
for j = i+1:n
zg(j,:) = zg(j,:) - zg(j,i)*zg(i,:)/zg(i,i);
end
end
y(n) = zg(n, n+1)/zg(n, n);
for k = n-1:-1:1
y(k) = (zg(k, n+1)-sum(zg(k,k+1:n).*y(k+1:n)))/zg(k,k);
end
for t = 1:n
x(x_index(t)) = y(t);
end