基于我们在线性代数中学习过的知识,我们知道解线性方程组本质上就是Gauss消元,也就是基于增广矩阵A的矩阵初等变换。关于数学层面的内容这里不做过多的介绍,这里的侧重点是从数值计算的角度来看这些常见的问题。

那么基于Gauss消元的算法,我们将会很好理解如下的Matlab代码:

for j = 1:n-1

for i = j+1 : n

mult = A(i,j)/A(j,j);

A(i,:) = A(i,:) – mult*A(j,:);    %这里改写成A(i , j:n) = A(i,j:n) – mult*A(j,j:n)效率更高

b(i) = b(i) – mult*b(j);         %这里的b是增光矩阵的最右一列向量,也就是方程组右侧常数部分

end;

end;

这我们能够明显的看到,由于这里计算mult的时候涉及除法,所以无法处理A(j,j)=0的情况。

关于这种一般化的Gauss消元,进行如下的时间复杂度的分析,这里我们以进行多少次浮点运算为衡量标准。

写法1 :

A(i,:) = A(i,:) – mult*A(j,:);

这种情况下,进行的浮点运算数如下:

写法2:

A(i , j:n) = A(i,j:n) – mult*A(j,j:n)

这种写法相对第一种写法的优化,体现在在处理每一行的时候,自动跳过了该行前面为0的元素,以减少浮点运算的次数。

它的运算次数计算过程如下:

这里进行了相当精确的计算,可以看到,对于n x n的系数矩阵,完成Guess消元至少也需要进行n的三次方次浮点运算。

承接上面对Guess消元算法的详细运算复杂度的分析,我们在分析时间复杂度的时候,往往会需要计算如下的一个和式:

这里就简单的介绍一下这个和式的一个估算方法。

我们利用幂函数与x轴围成的面积,使用一个类似夹逼准则的手法,来对这个和式进行估算。

我们将幂函数y = x^p,横坐标取m份,间距为1。

那么和式其实就是图中矩阵的和,那么我们很容易能够看到如下的一个不等式成立:

而这里我们观察前4个矩形上面的小矩形,他们和实际上等于第5个矩形,因此我们容易看到如下的不等式:

因此这个和式成功的被两个定积分给“夹逼”了,下面分别求定积分。

求线性方程组Ax=b的几种方法的比较:

《Numerical Methods》-chaper7-解线性方程组的直接方法和最小二乘问题的更多相关文章

  1. linux下 tar解压 gz解压 bz2等各种解压文件使用方法

    http://alex09.iteye.com/blog/647128 大致总结了一下linux下各种格式的压缩包的压缩.解压方法. .tar 解包:tar xvf FileName.tar 打包:t ...

  2. zImage.img、ramdisk.img、system.img、userdata.img介绍及解包、打包方法

    ramdisk.img system.img userdata.img介绍及解包.打包方法 Android 源码编译后,在out/target/product/generic下生成ramdisk.im ...

  3. Numerical Methods with MATLAB(1)

    目前正在阅读MATLAB相关的书籍:Numerical Methods with MATLAB,现在感觉这本书写的还行, 细致基础,而且写的比较清楚,同时把malab和数值算法结合在一起. 目前刚看完 ...

  4. windows下tomcat zip解压版安装方法

    下面记录一下在win7(32位)系统下,安装zip解压版的方法: 一.下载zip压缩包 地址:http://tomcat.apache.org/download-80.cgi 二.解压 我把解压包解压 ...

  5. CentOS下tar解压 gz解压 bz2等各种解压文件使用方法

    .tar  解包:tar xvf FileName.tar  打包:tar cvf FileName.tar DirName  (注:tar是打包,不是压缩!)  ———————————————  . ...

  6. 【matlab】MTATLAB解线性方程组

    在求解线性方程组时,会遇到以下几种情形:定解方程组.不定方程组.超定方程组.奇异方程组. 首先以定解线性方程组为例: format rat  化成分数 format short >> A= ...

  7. 详解Python模块导入方法

    python常被昵称为胶水语言,它能很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松联结在一起.python包含子目录中的模块方法比较简单,关键是能够在sys.path里面找到通向模块文件的 ...

  8. vue中用解构赋值的方法引入组件

    在一个组件中引入很多其他组件的时候会显得代码很臃肿,这个时候可以用es6的解构赋值的方法 在components中写入一个index.js文件 在该js文件中导出你想要引入的组件 再接着就可以在该组件 ...

  9. 高斯消去法解线性方程组(MPI)

    用一上午的时间,用MPI编写了高斯消去法解线性方程组.这次只是针对单线程负责一个线程方程的求解,对于超大规模的方程组,需要按行分块,后面会在这个基础上进行修改.总结一下这次遇到的问题: (1)MPI_ ...

随机推荐

  1. Open judge 06月度开销

    06:月度开销 总时间限制: 1000ms 内存限制: 65536kB 传送门 描述 农夫约翰是一个精明的会计师.他意识到自己可能没有足够的钱来维持农场的运转了.他计算出并记录下了接下来 N (1 ≤ ...

  2. 【BZOJ3527】【FFT】力

    [问题描述]给出n个数qi,给出Fj的定义如下:令Ei=Fi/qi.试求Ei.[输入格式]输入文件force.in包含一个整数n,接下来n行每行输入一个数,第i行表示qi.[输出格式]输出文件forc ...

  3. Java Runtime Data Area

    java虚拟机在执行java程序的过程中会把它所管理的内存划分为若干个区域,这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖着用户的线程的启动和结束而建 ...

  4. 配置并学习微信JS-SDK(2)—图片接口

    测试地址:http://www.qq210.com/shoutu/android 检查图像接口 选择本地或拍照的图片 上传选择的图片 预览上传的图片 //1.检查图像接口 document.query ...

  5. Android特效--粒子效果之雨

    1. 单个雨点的行为 2. 完善雨点的行为和构造下雨场景 3. 在XML中定义可以控制下雨的属性 --------------------------------------------------- ...

  6. mac+eclipse+svn+maven经验总结(转)

    1.Eclipse for Mac:http://mirrors.ustc.edu.cn/eclipse/technology/epp/downloads/release/indigo/SR2/ecl ...

  7. iOS: 学习笔记, 添加一个带界面约束的控制器

    1. 创建一个空iOS应用程序(Empty Application). 2. 添加加控制器类. 修改控制器类的viewDidLoad - (void)viewDidLoad { [super view ...

  8. [BZOJ 1500] [NOI2005] 维修数列

    题目链接:BZOJ - 1500 题目分析 我要先说一下,这道题我写了一晚上,然后Debug了一整个白天..........再一次被自己的蒟蒻程度震惊= = 这道题是传说中的Splay维护数列的Bos ...

  9. 【Java】整理关于java的String类,equals函数和比较操作符的区别

    初学 Java 有段时间了,感觉似乎开始入了门,有了点儿感觉但是发现很多困惑和疑问而且均来自于最基础的知识折腾了一阵子又查了查书,终于对 String 这个特殊的对象有了点感悟大家先来看看一段奇怪的程 ...

  10. iOS-NSTimer-pause-暂停-引用循环

    7月26日更新: 今天更新的主要目的是因为暂停!!!! 注:不推荐使用,并不是这样有错,而是因为这样写代码的规范问题,代码要有可读性,遵循代码即文档,使用暂停在团队合作中可能会带来误会,非必要不建议使 ...