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

高斯消去法与列主元消去法两种消去法在 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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java开发区块链只需150行代码

    java开发区块链只需150行代码本文目的是通过java实战开发教程理解区块链是什么。将通过实战入门学习,用Java自学开发一个很基本的区块链,并在此基础上能扩展如web框架应用等。这个基本的java区块链也实现简单的工作量证明系统。

    2022年7月3日
    25
  • java怎么测试_java中如何使用Junit测试[通俗易懂]

    java怎么测试_java中如何使用Junit测试[通俗易懂]java中如何使用Junit测试一、总结一句话总结:a、单元测试的测试代码在test文件夹下,和源码不在同一个文件夹下b、测试的类方法都以test开头,后面接要测试的类或者方法的名字1、JUnit中什么时候使用assertTrue,assertFalse语句?true通过false通过assertTrue(booleancondition);condition:如果condition结果为t…

    2022年7月8日
    20
  • windows10修改host文件_手机修改hosts文件

    windows10修改host文件_手机修改hosts文件Windows修改host文件在实际的开发中,有时我们会修改windows的hosts文件,达到指定域名映射到指定ip上的功能。修改方式如下:1.windows中hosts文件位置(win10):C:\Windows\System32\drivers\etc\hosts2.修改方式#将www.aaa.com域名映射到127.0.0.1IP地址上127.0.0.1www.aaa.com3.应用在不用重启系统情况下,应用修改后的hosts文件,打开

    2022年10月12日
    4
  • mysql数据类型tinyint_mysql字段类型长度

    mysql数据类型tinyint_mysql字段类型长度在MySQL的数据类型中,Tinyint的取值范围是:带符号的范围是-128到127。无符号的范围是0到255(见官方《MySQL5.1参考手册》http://dev.mysql.com/doc/refman/5.1/zh/column-types.html#numeric-types)。Tinyint占用1字节的存储空间,即8位(bit)。那么Tinyint的取值范围怎么来的呢?我们先看无符号…

    2022年9月21日
    2
  • nchar,char,varchar与nvarchar区别「建议收藏」

    nchar,char,varchar与nvarchar区别「建议收藏」nchar,char,varchar与nvarchar区别

    2022年4月24日
    81
  • Matlab画图常用的线条符号、颜色

    Matlab画图常用的线条符号、颜色线型说明标记符说明颜色说明-实线(默认)+加号符r红色–双划线o空心圆g绿色:虚线*星号b蓝色:.点划线.实心圆c青绿色x叉号符m洋红色s(square)正方形y黄色d菱形k黑色^上三角形w白色v下三角形>右三角形<左三角形p(pentagram)五角星h(hexagram)六边形square正方形pentagram…

    2022年6月12日
    346

发表回复

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

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