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

高斯消去法与列主元消去法两种消去法在 matlab 中的实现两种消去法的实现主要是 通过函数的实现 传入参数来实现的 如有其他需要 请另行修改代码高斯消去法函数实现算法设计传入参数为矩阵 A 向量 b 以及维度 n 传出参数是运行的时间通过两个循环实现 一个是消元 一个是回代第一个循环 从第一行到第 n 1 行 对之后的每一行做消元处理 当出现了第 k 行的第 k 个元素为 0 时 说明该矩阵有无数个解 弹出错误并结束函

两种消去法在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,即可返回最后的解。当然在计算机中,如果是随机生成的矩阵的话,可能会出现误差,此时得到的不是精确解,而是近似解
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233103.html原文链接:https://javaforall.net

(0)
上一篇 2025年8月15日 下午1:01
下一篇 2025年8月15日 下午1:22


相关推荐

  • 腾讯元宝文生图功能升级:混元与DeepSeek助你一键生成图片

    腾讯元宝文生图功能升级:混元与DeepSeek助你一键生成图片

    2026年3月13日
    3
  • DRM加密技术是怎么一回事

    DRM加密技术是怎么一回事有时我们在播放从网上下载的影视文件时会要求输入用户许可证 否则就不能正常播放 听说是用了一种 DRM 技术 请简单介绍一下 答 通常这是利用了多媒体 DRM 加密技术保护版权 DRM 是数字权限管理技术的缩写 例如 你将自己拍摄的某个视频文件上传到网上 但只想让获得了许可的朋友才能进行观看 DRM 加密原理 首先需要建立一个数字节目授权中心 相当于许可证发放服务器 例如在服务器上安装和配置中国数字版权

    2026年3月20日
    2
  • jsp分页功能实现两种方法(html如何实现分页功能)

    本期的jsp入门学习内容:实现JSP分页显示的方法。今天给大家带来实现jsp分页显示的代码,简单的7个步骤就可以实现JSP的分页显示,有需要的朋友可以参考一下,学习些jsp开发的知识。正式开始此次的jsp入门教程的学习:1、MySQL的limit关键字(DAO)2、jQuery load函数(页面JS)MySQL的limit关键词能够完结抽取必定规模(n

    2022年4月17日
    275
  • 小精灵无尽的长廊_绝顶高手的养成日常

    小精灵无尽的长廊_绝顶高手的养成日常推荐:巫医觉醒https://www.guibuyu.org/。华夏北方,临近东海的不知名小城里,有绵延不尽的山峰耸立。其中一座,造型独特,神似一位席地而坐头戴鹤勉的君王模样,被当地的村名唤作“唐王山寨”。唐王山寨并不算高,只有大约300米的高度,在山峰环绕的小城里,不太显眼。正值夏季,正午的灼热阳光肆意挥洒,通往唐王山寨的油柏小路,蒸腾出肉眼可见的水雾,和着沥青独有的气息,飘荡远方。沿着小路一路…

    2022年6月4日
    267
  • eigen库基本使用方法_mkl库

    eigen库基本使用方法_mkl库Eigen帮助C++实现了对矩阵的非常方便的操作。本文旨在总结常用的矩阵处理对应的代码。

    2022年10月19日
    3
  • 给Android程序员的一些面试建议「建议收藏」

    给Android程序员的一些面试建议「建议收藏」前言应大家的邀请,写一篇关于Android面试相关的博客,需要说明的是本文只针对Android应用开发,不针对rom开发以及逆向工程。我想面试对于程序员来说是很重要的一件事件,面试结果的好坏直接决定了能否进入某个公司以及以什么级别和待遇进入某个公司。我参加面试的经验并不多,但是以面试官的身份面试别人倒是有很多次,所以我可以结合这些经验来介绍下如何更好地把握一个面试。什么是合适的候选者在介绍如何面试之

    2022年6月14日
    167

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号