Gaussian-Jordan列主元消元 matlab實現
阿新 • • 發佈:2018-12-13
可能的問題:無唯一解;輸入極小近似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