可能的问题:无唯一解;输入极小近似0;列主元太小;
function x = my_solve(A,b)
matrix = [A,b];
R = my_rref(matrix);
x = R(:,end);
function x = my_rref(matrix)
n = length(matrix(:,end));
for i = 1 : n
%2.找第I列最大值
[max_col,position_to_i]= max(matrix(i:end,i));%只考虑i后的行列, 第一个最大的位置
if max_col == 0
error('主对角元是0,无唯一解,无法用高斯主列消元法解');
end
%交换最大元列 的行
max_col_rowposition = position_to_i+i-1;%列中的实际位置..
if max_col_rowposition ~= i
temp = matrix(i,:);
matrix(i,:) = matrix(max_col_rowposition,:);
matrix(max_col_rowposition,:) = temp;
end
%主对角元化1
matrix(i,:) = matrix(i,:)/matrix(i,i);
%i+1行后全部行 消元
for j = (i+1): n
scale = matrix(j,i) / matrix(i,i);
matrix(j,:) = matrix(j,:) - scale * matrix(i,:);
end
end
%后替换法
for i = n:-1:1
for j = 1:i-1
matrix(j,:) = matrix(j,:) - matrix(j,i)*matrix(i,:);
end
end
x = matrix