1. 程式人生 > >Gaussian-Jordan列主元消元 matlab實現

Gaussian-Jordan列主元消元 matlab實現

可能的問題:無唯一解;輸入極小近似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