高斯消去法与列主元消去法

两种消去法在matlab中的实现

两种消去法的实现主要是,通过函数的实现,传入参数来实现的。如有其他需要,请另行修改代码

高斯消去法函数实现

算法设计

  • 传入参数为矩阵A,向量b,以及维度n
  • 传出参数是运行的时间
  • 通过两个循环实现,一个是消元,一个是回代
  • 第一个循环,从第一行到第n-1行,对之后的每一行做消元处理。当出现了第k行的第k个元素为0时,说明该矩阵有无数个解,弹出错误并结束函数运行
  • 第二个循环是从最后一行开始,通过回代,从最后一行得出x的值
  • 时间的计算问题,通过tic跟toc,得到了两个循环所需要的时间并返回

代码如下:

function time = Gauss(n, A, b)

   %B = [A b];

   tic;
   for k = 1:n-1
       if A(k,k) == 0
          disp('the matrix has too many answers, please change the matrix');
          return
       end    
      for i = k+1:n
         m = A(i, k) / A(k , k);
         A(i, k) = 0;
         A(i, k+1:n) = A(i, k+1:n) - m*A(k, k+1:n);
         b(i) = b(i) - m*b(k);
      end
   end

   %回代取得结果


   x = zeros(n,1);
   if A(n, n) == 0
       disp('the matrix has too many answers, please change the matrix');
          return
   end
   x(n) = b(n) / A(n,n);
   for i = n-1:1
      x(i) = (b(i) - sum(A(i,i+1:n) * x(i+1:n)))/A(i,i);
   end
   toc;
   time = toc;
end

列主元消去法

算法设计

  • 主要的操作与高斯消去法想类似
  • 区别在于:每次在第k行消元的时候,将第k行的元素与拥有第k列最大元素的行进行交换,再进行消元

代码如下:

function time = ColumnPivot(n, A, b)

   %B = [A b];
   tic;
   for k = 1:n-1
       max = -1;
       m = k;
       for j = k+1:n
          if A(j, k) > max
             max = A(j, k);
             m = j;
          end
       end
       A([k m], :) = A([m k], :);
       temp = b(m);
       b(m) = b(k);
       b(k) = temp;

       %判断是否是0
       if A(k,k) == 0
          disp('the matrix has too many answers, please change the matrix');
          return
       end    
      for i = k+1:n
         m = A(i, k) / A(k , k);
         A(i, k) = 0;
         A(i, k+1:n) = A(i, k+1:n) - m*A(k, k+1:n);
         b(i) = b(i) - m*b(k);
      end
   end

   %回代取得结果


   x = zeros(n,1);
   if A(n, n) == 0
       disp('the matrix has too many answers, please change the matrix');
          return
   end
   x(n) = b(n) / A(n,n);
   for i = n-1:1
      x(i) = (b(i) - sum(A(i,i+1:n) * x(i+1:n)))/A(i,i);
   end

   toc;
   time = toc;
end

特殊说明

  • 具体算法的内容,其实在教科书或者在其他博客上已经有很详细的说明了,在这里就不再重复了。
  • 尽管实现的函数都是返回时间,但是只需要将返回的参数改成x,即可返回最后的解。当然在计算机中,如果是随机生成的矩阵的话,可能会出现误差,此时得到的不是精确解,而是近似解
  • 10
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值