1、误差的来源

  • 模型误差:数学模型与实际问题之间的误差
  • 观测误差:测量数据与实际数据的误差
  • 方法误差:数学模型的精确解与数值方法得到的数值解之间的误差:例如
  • 舍入误差:对数据进行四舍五入后产生的误差

2、减少误差的几种方法

         现在,我们一般用计算机解决计算问题,使用最多的是Matlab软件。对实际问题进行数学建模时,可能存在模型误差,对数学模型进行数值求解时,我们使用的方法可能产生方法误差,我们输入计算机的数据一般是有测量误差的,计算机在运算过程的每一步又会产生舍入误差(十进制转化为二进制时可能产生舍入误差)。由此看来,解决一个问题,基本上会有以上四种四种误差。记得高中物理老师说过,错误是可以避免的,误差是不可避免的,我们只可以减少误差。下面我们就来介绍减少误差的几种方法:
  • 避免两个相近的数相减
                    eg:当x=10003时,计算的近似值。
                    如果使用6位十进制浮点运算,运算时取6位有效数字,结果如下:
                 
            结果只有一位有效数字,与之前相比,损失了5位有效数字。
                    如果使用下面的方法:
                 
            则结果有6位有效数字,与精确值0.00499912523117984……较为接近。
  •  防止重要的小数被大数吃掉
            eg: 已知,求

            如果按照的顺序来求的话,由于x远大于y,在计算机中可能导致x+y=x的情况,因此我们可以按照的顺序计算得到正确的结果。
  • 避免除数的绝对值远小于被除数的绝对值
            eg:用消去法解线性方程组
            
                
           这个方程组的正确解为:
             

          当我们用(1)/0.00003-(2)时,可以得到下面的化简和计算结果:
             

            显然上述结果严重失真,产生了很大的误差。这就是由于除数的绝对值远小于被除数的绝对值造成的。
           为了避免上述情况,我们可以用第二个方程消去第一个方程中的x1,即(2)*0.00003-(1),得到如下表达式和结果:
           

            将结果与正确解相比发现,这是一组相当好的近似解。                    
  •  注意算法的稳定性
            所谓算法的稳定性是指,一个算法如果输入数据有误差,而在计算过程中误差不增长,那么称此算法是数值稳定的。
   
  
        上面的部分基本上都来源于《数值分析》一书,讲的挺好的,这些减小误差的方法,我们平时需要多注意,在用c进行编程实现时需要注意,而用Matlab实现时,上面的问题都不是问题了,不过我们要学习的是这种方法和技巧。下面讲讲,在实现上述方法的Matlab的知识:1、精度控制;2、解线性方程组。


一、精度控制
     format  digits  vpa函数的使用
     format只用来控制显示精度的,并不控制计算精度,digits用来控制计算精度,vpa也是控制计算精度。
     digits必须与vpa配合使用,单独不起作用。
     vpa可单独控制计算精度
     
     具体操作如下图:
            1、format的操作
                

            2、digits的操作

               
            3、vpa的操作
               

     二、解非齐次线性方程组
           


             可以通过以下四种方法求解该方程组:
              用矩阵表示上述的线性方程组如下:

  • 求逆矩阵法
            


  • 矩阵左除法

                   
  • 初等行变换

                     
  • 卡莱姆法则
                       

具体的程序实现如下:
clear all
clc

A=[ 6 2 3 4 5
    2 -3 7 10 13
    3 5 11 -16 21
    2 -7 7 7 2
    7 3 -5 3 10]
b=[80 59 90 22 85]'

x1=inv(A)*b%逆矩阵法
x2=A\b%矩阵左除法
x3=rref([A b])%初等行变换

%克拉姆法则
for i=1:length(A)
    B=A;
    B(:,i)=b;
    x(i)=det(B)/det(A);
end
x'

运行结果如下图:

注意事项:当系数矩阵A不是方阵,或A的行列式为0时,逆矩阵法和克拉姆法则无法使用,而初等行变换能适用于各种线性方程组的求解。

【数值分析】误差的分析与减少及Matlab解线性方程的四种方法的更多相关文章

  1. 用MATLAB结合四种方法搜寻罗马尼亚度假问题

    选修了cs的AI课,开始有点不适应,只能用matlab硬着头皮上了,不过matlab代码全网仅此一份,倒有点小自豪. 一.练习题目 分别用宽度优先.深度优先.贪婪算法和 A*算法求解"罗马利 ...

  2. MATLAB中多行注释的三种方法

    MATLAB中多行注释的三种方法 A. %{ 若干语句 %} B. 多行注释: 选中要注释的若干语句, 编辑器菜单Text->Comment, 或者快捷键Ctrl+R 取消注释: 选中要取消注释 ...

  3. 使用MATLAB对图像处理的几种方法(上)

    实验一图像的滤波处理 一.实验目的 使用MATLAB处理图像,掌握均值滤波器和加权均值滤波器的使用,对比两种滤波器对图像处理结果及系统自带函数和自定义函数性能的比较,体会不同大小的掩模对图像细节的影响 ...

  4. Spring Ioc源码分析系列--容器实例化Bean的四种方法

    Spring Ioc源码分析系列--实例化Bean的几种方法 前言 前面的文章Spring Ioc源码分析系列--Bean实例化过程(二)在讲解到bean真正通过那些方式实例化出来的时候,并没有继续分 ...

  5. {matlab}取二值图像centroid几种方法性能比较

    试验很简单,取二值图像的质心,三种方法做比较 1.完全采用矩阵性能不做任何循环操作,对find后的值进行除法与取余操作,从而得到centroid 2.完全采用循环操作,最简单明了 3.结合1,2,对每 ...

  6. 使用MATLAB对图像处理的几种方法(下)

     试验报告 一.试验原理: 图像点处理是图像处理系列的基础,主要用于让我们熟悉Matlab图像处理的编程环境.灰度线性变换和灰度拉伸是对像素灰度值的变换操作,直方图是对像素灰度值的统计,直方图均衡是对 ...

  7. 减少页面加载时间的n种方法

    减少HTTP请求 1:减少调用其他页面.文件的数量 2:使用css spirit , 减少图片加载次数 压缩js,css代码 1:一般js.css文件中存在大量的空格.换行.注释,这些利于阅读,如果能 ...

  8. Matlab中图片保存的四种方法

    matlab的绘图和可视化能力是不用多说的,可以说在业内是家喻户晓的.Matlab提供了丰富的绘图函数,比如ez**系类的简易绘图函数,surf.mesh系类的数值绘图函数等几十个.另外其他专业工具箱 ...

  9. matlab拟合函数的三种方法

    方法一:多项式拟合polyfit 1 x=[1 2 3 4 5 6 7 8 9]; 2 3 y=[9 7 6 3 -1 2 5 7 20]; 4 P= polyfit(x, y, 3) %三阶多项式拟 ...

随机推荐

  1. 2017年校园招聘ios面试题

    一.搜狐快站 1.谈谈你做过的项目: 2.项目中最有成就感的部分: 3.倒计时如何实现?(NSTimer,还有其他的实现方式吗): 4.UIButton的继承关系? 5.iOS中可以进行输入的控件?( ...

  2. ROS机器人程序设计(原书第2版)补充资料 (陆) 第六章 点云 PCL

    ROS机器人程序设计(原书第2版)补充资料 (陆) 第六章 点云 PCL 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中使用. RGBD深度摄像头 ...

  3. ROS(indigo) 用于机器人控制的图形化编程工具--code_it robot_blockly

    0 简介: 编程语言有汇编,高级语言,解释语言等,现在图形化编程也越来越流行.图形化编程简单易学.8年前,微软推出了VPL用于机器人程序设计,如Python和JavaScript都可以用图形化框图实现 ...

  4. activty栈管理

    题外话:我们有时在开发中,通常会有如下的需求:屏幕1-->屏幕2-->屏幕3-->屏幕4...,现在需要直接从屏幕4-->屏幕1,很多人会想到对activity进行管理得到对应 ...

  5. 字符编码(ASCII、ANSI、GB2312、UTF-8等)系统梳理

    引言 在显示器上看见的文字.图片等信息在电脑里面其实并不是我们看见的样子,即使你知道所有信息都存储在硬盘里,把它拆开也看不见里面有任何东西,只有些盘片.假设,你用显微镜把盘片放大,会看见盘片表面凹凸不 ...

  6. K均值聚类的失效性分析

    K均值聚类是一种应用广泛的聚类技术,特别是它不依赖于任何对数据所做的假设,比如说,给定一个数据集合及对应的类数目,就可以运用K均值方法,通过最小化均方误差,来进行聚类分析. 因此,K均值实际上是一个最 ...

  7. UNIX网络编程——tcp流协议产生的粘包问题和解决方案

    我们在前面曾经说过,发送端可以是一K一K地发送数据,而接收端的应用程序可以两K两K地提走数据,当然也有可能一次提走3K或6K数据,或者一次只提走几个字节的数据,也就是说,应用程序所看到的数据是一个整体 ...

  8. VS2010 express中改变VC Default include/lib/… 目录

    转自: Liz's Blog http://www.cnblogs.com/lizmy/archive/2012/01/10/2318258.html 2010中是以工程为单位,更改VC++ dire ...

  9. C语言--static修饰函数

    在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条. 介绍它的第一条也是最重要的一条:隐藏. 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性 ...

  10. Swift基础之实现一个镂空图片的小Demo

    前两天看了别人的文章,涉及到了镂空的展示,所以我在这里把实现的内容写成Swift语言的小Demo,供大家欣赏 首先,需要创建导航视图,然后创建两种展示方式的按钮 let vc = ViewContro ...