文章目录

  • 一、选用算法的原则
    • 1、避免两个相近数相减
    • 2、简化运算步骤、减少运算次数
    • 3、防止大数“吃掉”小数
    • 4、选用数值稳定性好的算法
  • 二、算法稳定性评估

一、选用算法的原则

原则如下:

  • 尽量避免两个相近数相减
  • 尽量简化运算步骤、减少运算次数
  • 尽量防止大数“吃掉”小数
  • 尽量选用数值稳定性好的算法

1、避免两个相近数相减

举几个例子:

  • 当xxx很大时,将算式1x−1x+1\frac{1} {x} - \frac {1} {x+1}x1​−x+11​换为1x(x+1)\frac {1} {x(x+1)}x(x+1)1​
  • 当xxx很大时,将算式x+1−x\sqrt{x+1} - \sqrt{x}x+1​−x​换成1x+1+x\frac {1} {\sqrt{x+1} + \sqrt{x}}x+1​+x​1​
  • 当x1x_1x1​、x2x_2x2​很接近时,将算式lg⁡x1−lg⁡x2\lg x_1 - \lg x_2lgx1​−lgx2​换成lg⁡x1x2\lg \frac {x_1} {x_2}lgx2​x1​​

2、简化运算步骤、减少运算次数

举个例子:

  • 计算多项式函数pn(x)=anxn+an−1xn−1+⋯+a1x+a0p_n(x)=a_nx^n+a_{n-1}x^{n-1}+ \cdots + a_1x + a_0pn​(x)=an​xn+an−1​xn−1+⋯+a1​x+a0​时,可以写成pn(x)=(…((anx+an−1)x+an−2)x+an−3…+a1)x+ap_n(x) = (\ldots ((a_nx + a_{n-1})x + a_{n-2})x + a_{n-3} \ldots + a_1)x + apn​(x)=(…((an​x+an−1​)x+an−2​)x+an−3​…+a1​)x+a
    这也是秦九韶算法(递推算法),可以按照下列公式计算:{un=anuk=xuk+1+ak(k=n−1,n−2,⋯,1,0)pn(x)=u0\begin{cases} u_n = a_n \\ u_k = xu_{k+1} + a_k & {(k = n-1, n-2, \cdots, 1, 0)} \\ p_n(x)=u_0 \end{cases}⎩⎪⎨⎪⎧​un​=an​uk​=xuk+1​+ak​pn​(x)=u0​​(k=n−1,n−2,⋯,1,0)​

3、防止大数“吃掉”小数

为了防止出现“机器零”,也可以给每个数乘一个大的因子,例如乘以10,最后再计算原数值。

4、选用数值稳定性好的算法

举个例子:

  • 计算积分In=∫01xnex−1dx(n=0,1,2,⋯)I_n = \int _0^1 x^ne^{x-1} \, dx (n = 0, 1, 2, \cdots)In​=∫01​xnex−1dx(n=0,1,2,⋯)
    如果采用下面的递推算法,虽然I0I_0I0​的近似值误差很小,但是当nnn很大的时候计算结果往往失真严重,这样的算法,称为数值不稳定的算法。{I0=1−e−1In=1−nIn−1\begin{cases} I_0 = 1 - e^{-1} \\ I_n = 1 - nI_{n-1} \end{cases}{I0​=1−e−1In​=1−nIn−1​​
    因此应该采用这样的算法:In−1=1n(1−In)I_{n-1} = \frac {1} {n} (1 - I_n)In−1​=n1​(1−In​)

二、算法稳定性评估

一个算法稳定性的判断,关键是要推导出误差的传播公式。若误差在计算过程中变化大就是不稳定的,否则就是稳定的。

《数值分析》学习笔记 ·003——数值计算中应该注意的几个问题相关推荐

  1. SpringBoot学习笔记(4)----SpringBoot中freemarker、thymeleaf的使用

    1. freemarker引擎的使用 如果你使用的是idea或者eclipse中安装了sts插件,那么在新建项目时就可以直接指定试图模板 如图: 勾选freeMarker,此时springboot项目 ...

  2. Hadoop学习笔记—11.MapReduce中的排序和分组

    Hadoop学习笔记-11.MapReduce中的排序和分组 一.写在之前的 1.1 回顾Map阶段四大步骤 首先,我们回顾一下在MapReduce中,排序和分组在哪里被执行: 从上图中可以清楚地看出 ...

  3. 【theano-windows】学习笔记十七——梯度中的consider_constant

    前言 主要是在写玻尔兹曼机相关的theano时, 在计算梯度grad的时候发现一个参数名字叫做consider_constant,来看看这个到底做了什么事情 参考博客: using consider_ ...

  4. 【theano-windows】学习笔记十一——theano中与神经网络相关函数

    前言 经过softmax和MLP的学习, 我们发现thenao.tensor中除了之前的博客[theano-windows]学习笔记五--theano中张量部分函数提到的张量的定义和基本运算外, 还有 ...

  5. 【theano-windows】学习笔记六——theano中的循环函数scan

    前言 Scan是Theano中最基础的循环函数, 官方教程主要是通过大量的例子来说明用法. 不过在学习的时候我比较习惯先看看用途, 然后是参数说明, 最后再是研究实例. 国际惯例, 参考网址 官网关于 ...

  6. SpringBoot学习笔记(9)----SpringBoot中使用关系型数据库以及事务处理

    在实际的运用开发中,跟数据库之间的交互是必不可少的,SpringBoot也提供了两种跟数据库交互的方式. 1. 使用JdbcTemplate 在SpringBoot中提供了JdbcTemplate模板 ...

  7. cockroachdb mysql_CockroachDB学习笔记——[译]CockroachDB中的SQL:映射表中数据到键值存储...

    CockroachDB学习笔记--[译]CockroachDB中的SQL:映射表中数据到键值存储 原文标题:SQL in CockroachDB: Mapping Table Data to Key- ...

  8. vue文件里在style的样式需要什么loader_Vue学习笔记之Webpack中css、less、图片等文件处理...

    一.webpack中使用css文件: loader是webpack中一个非常核心的概念,去转化webpack不能转化或打包的文件. 安装loader: 官网介绍: 安装: cnpm install - ...

  9. ASP.Net学习笔记015--ASP.Net中使用Cookie

    ASP.Net学习笔记015--ASP.Net中使用Cookie 表单数据欺骗: 原理跟收到欺骗短信一样,移动信号塔[基站],伪装的移动信号塔会屏蔽移动信号,并且 在信号范围内的手机会自动切换为接收伪 ...

最新文章

  1. Redhat 图形模式与命令行模式的切换
  2. wordpress漏洞_聊聊 WordPress 5.1.1 CSRF to RCE 漏洞
  3. linux snap 沙盒化软件包格式 简介
  4. tensorflow2.X安装及使用
  5. K Nearest Neighbor 算法
  6. Micropython Turnipbit自动窗帘模拟系统
  7. Python的locals()函数
  8. python怎么安装pip?
  9. Redis设计与实现阅读总结(一)数据结构和对象
  10. HowNet文件介绍
  11. (扒站工具)如何下载网站fonts文件夹
  12. matlab的setup阶跃曲线图,matlab 绘制系统的单位阶跃响应曲线 并编写程序求峰值时间 超调量 | 学步园...
  13. Java将一张图片放在另一张图片上(位置可选)
  14. NLP之NER:商品标题属性识别探索与实践
  15. 微信小程序笔记(一)初次接触小程序开发
  16. python程序设计入门书籍推荐_python刚刚入门,接下来这几本python的书会让你成为别人眼里的大神!...
  17. django Using the URLconf defined in test02.urls, Django tried these URL patterns, in this order:
  18. 01 KVM虚拟化简介
  19. python抓取视频_python实现超简单的视频对象提取功能
  20. Java NIO通信框架在电信领域的实践

热门文章

  1. python输入三次密码程序_请教各位大神,为啥以下代码输入修改密码后连输错三次还是能输入...
  2. python做马尔科夫模型预测法_用Python实现马尔可夫链蒙特卡罗
  3. android 图片墙拼贴,三步搞定 用APP打造图片文字拼贴效果
  4. python 安装第三方库/包(命令/详细注释),如安装pyinstaller库
  5. vue动态class类型
  6. 计算机98k音乐,【土豆】handclap 98K 完整版
  7. 主板刷安卓 联发科_魅蓝2—来自2015年的青年良品,在2020刷个安卓9.0,起死回生(附教程及资源)...
  8. 椒盐噪声 Python实现
  9. 802. 区间和(离散化)
  10. 《人工智能》实验二——搜索技术(八数码问题)