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

 

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值