《数值计算》学习笔记(上)
考点
- Chp1 数值计算概述
- 1.4 利用机器计算的基本方法
- 1.6关于算法的评价
- Chp2 误差分析
- 2.1 误差的来源与分类
- 2.2 误差的基本概念
- 2.3 有效数
- 2.4 利用微分估算误差(2.4.1和2.4.2)
- 2.6 近似计算的基本原则
- Chp3 常用函数值计算方法
- 3.2 多项式与有理函数值计算方法
- 3.5 三角函数值计算方法
- 3.6 对数函数值计算方法
- 3.7 指数函数与幂函数值计算方法
- Chp5 求函数的零点与极值问题
- 5.1 函数的零点与极值问题概述
- 5.2 区间对分法
- 5.3 黄金分割法
Chp1 数值计算概述
1.4 利用机器计算的基本方法
离散化方法
设f(x)是定义在[a,b]上的连续函数,当它们的表达式很复杂,甚至写不出来时,我们可以选择若干个离散点x0, x1,…, xn∈[a,b],求出f(x)在这些点处的函数值或函数值的近似值fi= f(xi) i=0,1,…,n, 从而得到一个如下的函数值列表:
插值方法
对于任意给出的某个函数y=f(x)的函数值列表,我们可以构造一个简单函数,比如n次多项式pn(x),满足条件pn(xi)=yi, i=0,1,…,n,并利用pn(x)近似表示f(x)。
逼近方法
设f(x)是满足某种特定条件的函数(比如在某个区间上连续可微、在某个区间上平方可积等),表达式比较复杂甚至写不出来,但是我们可以把它表示为一个简单函数系列{fn(x),n=1,2,…}的极限,即 Lim fn(x)=f(x) (n->∞)
这样我们就可以根据不同的精度要求选取适当大的正数N,利用fN(x)近似替代f(x)。
迭代方法
假如我们要计算出某个实际值x*,我们可以构造一个序列{xn,n=0,1,2,…},满足条件:x0 为已知值;有一个简单函数φ(t),且xn+1=φ(xn),n=0,1,2,…,lim xn=x* (n→∞)
那么,我们可以反复利用xn+1=φ(xn), 经过N 次迭代后,用xN+1作为x* 的近似值。
1.6关于算法的评价
程序的可读性好
节省计算时间
节省存储空间
数值稳定性好(提高收敛率,增强数值稳定性)
Chp2 误差分析
2.1 误差的来源与分类
过失误差,描述误差,观测误差,截断误差和舍入误差
过失误差:是由设备故障和人为的错误所产生的误差,在由于每个人都有“权利”利用机器进行数值计算,所以在计算方法研究领域应当强调怎样有效避免过失误差。
描述误差:为了便于数学分析和数值计算,人们对实际问题的数学描述通常只反映出主要因素之间的数量关系,而忽略次要因素的作用,由此产生的误差称为描述误差。对实际问题进行数学描述通常称为是建立数学模型,所以描述误差也称为是模型误差。(比如“忽略空气阻力”)
观测误差:描述实际问题或实际系统的数学模型中的某些参数往往是通过实验观测得到的。由试验得到的数据与实际数据之间的误差称为观测误差。(比如“重力加速度g,它在地球表面的不同位置以及不同高度的值是不同的”)
舍入误差:几乎所有的计算工具,当然也包括电子计算机,都只能用一定数位的小数来近似地表示数位较多或无限的小数,由此产生的误差称为舍入误差。
截断误差:是计算方法本身所产生的误差,所以在我们的课程中,重点还是考虑尽可能消除截断误差。与截断误差密切相连的数学知识是泰勒展式,我们经常会利用泰勒展式来消除截断误差。
注:我们的计算方法对于如何消除描述误差,观测误差和舍入误差无能为力,但是应当考虑尽量消除这些误差对计算结果的影响,也就是减少误差的传播。
2.2 误差的基本概念
误差,绝对误差,相对误差,绝对误差限,相对误差限,数的近似表示
定义:设x *为某个量的真值,x为 x *的近似值,称 |x *- x|为近似值x的绝对误差;称 |x *- x|/|x|为近似值x的 相对误差。
既然在绝大多数情况下我们无法确定出真值x *,那么近似值x的误差、相对误差、以及绝对误差也都是无法确定的,但是我们总有办法估计出它们会落在那个范围之内。我们平时口语中所讲的误差,实际所指的都是误差限。
定义:设x为真值x * 的近似值:
若e>0满足条件|x*-x|≤e,则称e为x的绝对误差限(或误差限);
若er>0满足条件|x*-x|/|x|≤er,则称er为x的相对误差限。
提示:绝对误差限和相对误差限满足关系e = er·|x|
所以只要知道其中的任意一个,即可求出另外一个。
2.3 有效数
定义:如果真值x *的近似值x的绝对误差限是它的某一个数位的半个单位,则称近似值x准确到这一位,且这一位一直到最左边第一个非零数字为止的所有数字都称为有效数字,有效数字的个数称为有效数字的位数。
记号:若近似值x有p位有效数字,那么我们可以把x表示为
x=±0.x1x2…xp×10n(其中x1,x2,…,xp∈{0,1,…,9},且x1≠0)
四舍五入:
若x * 的近似值为x=±0.x1x2…xp×10n(其中x1,x2,…,xp∈{0,1,…,9},且x1≠0.)
如果要保留p位有效数字,(即|x*-x|≤0.5×10n-p)那么我们可以把x的小数点后的第p+1位四舍五入,称为使x保留p位有效数字。
2.4 利用微分估算误差(2.4.1和2.4.2)
结论:在微分公式df(x)= f’(x)dx中如果把|dx|解释为x的绝对误差(限),那么|df(x)|就是所得到的计算结果f(x)的绝对误差限。
当我们把f(x)的绝对误差(限)近似地表示为df(x)时,我们可以进一步得到f(x)的相对误差(限)为
结论:我们可以把|dln[f(x)]|作为f(x)的相对误差限的计算公式。
提示:虽然有时候f(x)可以取负值,但进行误差分析时,可以将它反号而不影响误差分析的结果。
2.6 近似计算的基本原则
1、由于现在计算机的性能有大幅度提高,所以应当尽量采用双精度数计算,把提高精度放在更为重要的位置。
2、应当尽量避免绝对值相近的两个正数相减,这样会吃掉许多有效数字位,这是计算方法中的头号杀手。
3、应当尽量避免绝对值较大的数除以绝对值较小的数,如前所述这样会产生较大的绝对误差,甚至导致计算机数字溢出。
4、应当防止“大数”吃“小数”,绝对值相差很大的两个正数相加或相减,由于是对位相加,所以小数会吃亏。大量的这样类似的计算会有些问题。
5、尽可能减少运算次数,防止误差扩散。
Chp3 常用函数值计算方法
3.2 多项式与有理函数值计算方法
逐项求和算法
//程序3.01 逐项求和法求多项式的值
double PolyValue(double x,double*A,int n)
{ double power=1.0,y;int k;y=A[0];for(k=1;k<=n;k++){ power*=x;y+=A[k]*power;}return y;
}
//注释:程序3.01由于循环体内出现了两次乘法运算,所以计算量为O(2n)
秦九韶算法
总结:下一项=余项+公因子*上一项
//程序3.02 秦九韶算法求多项式的值
double PolyValue(double x,double*A,int n)
{ double y;int k;y=A[n];for(k=n-1;k>=0;k--)y=y*x+A[k];return y;
}
由于不需要保留yn,yn-1,…,y1等中间结果,所以程序中只用一个变量y来动态地表示它们。秦九韶算法的循环体内只有一次乘法运算,所以算法的计算量为O(n),相当于程序3.01的一半。避免了大数吃小数的问题。
当计算的项数比较大时采用秦九韶算法可明显地提高精度。
3.5 三角函数值计算方法
正弦函数泰勒展式的求和方法:
//程序3.06 SINTNV(x,n)
#define PI 3.1415926535897932l
double SINTNV(double x,int N)
{ int K; double y=1.0,xx=0.0,temp;K=N*2;xx=x*x;while(K>0){ y=1.0-y*xx/K/(K+1);K-=2;} return y*x;}
余弦函数泰勒展式的求和方法:
//程序COSTNV(x,n)
#define PI 3.1415926535897932l
double COSTNV(double x,int N)
{ int K; double y=1.0,xx=0.0,temp;K=N*2;xx=x*x;while(K>0){ y=1.0-y*xx/K/(K-1);K-=2;} return y;}
3.6 对数函数值计算方法
对数函数泰勒展式的求和方法:
//程序3.12 LOGTNV(x,n)
double LOGTNV(double x,int n)
{ int K,NK; double xx,y;NK=n*2+1; xx=x*x;y=1.0/NK;for(K=n;K>0;K--){ NK-=2;y =1.0/NK+xx*y;} return y;
}
3.7 指数函数与幂函数值计算方法
指数函数泰勒展式的求和方法:
//程序3.16 EXPTNV(x,n)数值计算方法
double EXPTNV(double x,int N)
{ int K=0;double y=1.0;for(K=N;K>0;K--)y=1.0+y*x/K;return y;
}
Chp5 求函数的零点与极值问题
5.1 函数的零点与极值问题概述
零点定义:设f(x)是定义在闭区间[a,b]上的连续函数,如果x∈[a,b]使得f(x)=0,则称x*是f(x)的一个零点。
结论:由高等数学中的介值定理可知,如果f(x)是连续函数,而且f(a)·f(b)<0,则方程f(x)=0在[a,b]内一定有解。
如图所示,只要f(a)和(b)异号,函数的图像就一定在[a,b]内和x轴相交,也就是 f(x)=0在[a,b]内有解,从而找到了隔根区间。
求隔根区间的方法有:
分析法:利用高等数学(数学分析)中的函数作图方法画出y=f(x)的大致曲线即可确定隔根区间;(学生最适用)
试算法:试探性地给出两个数a,b,若f(a)·f(b)<0,则试算成功,否则修改a或b,重新试算;(适用于数学经验丰富者)
搜索法:从某一点开始,按一定的步长分别向左或向右逐点计算,直到出现相邻两点函数值异号。 (适用于工程师)
极值点定义:设y= f(x)是定义在区间[a,b]上的连续函数,对于x∈(a,b),如果存在δ>0使得当|x-x * |<δ时,恒有f(x * )≤f(x),则称x是f(x)在(a,b)内的一个极小值点。
5.2 区间对分法
算法原理
直接取区间[a,b]的中点x=(a+b)/2作为问题的近似解.那么绝对误差限仅为区间长的一半.即e=(b-a)/2.
如果这个结果能满足精度要求,我们就停止进一步的计算;如果不能,就求出f(x),结果只能是下面三种情况之一:
f(a)·f(x)<0,此时我们有x* ∈[a,x];
f(x)·f(b)<0,此时我们有x*∈[x,b];
f(x)=0,此时x即为问题的精确解.
上面第三种情况一般不会发生,可以不予考虑.在前两种情况下,我们可以用x分别替换原问题中的b或a,从而把求解的区间减小了一半。这样我们又可以取新区间[a,b]的中点。
实例:
使用excel表格设置好各项的函数就可以逐行算出啦
5.3 黄金分割法
单峰函数的定义:设y= f(x)是定义在某区间[a,b]上的实函数,如果存在x ∈[a,b]使得f(x)在[a,x]上是单调减函数,而在[x*,b]上是单调增函数,则称f(x)是区间[a,b]上的单峰函数。
若f(x1)<f(x2),则x∈[a, x2]
若f(x1)>f(x2),则x∈[x1,b]
若f(x1)=f(x2),则x*∈[x1, x2]
黄金分割点的求法
设[a,b]是一个线段或区间,x 是[a,b]上的一个(分割)点,如果两个子区间[a,x]和[x,b]的长度之比正好等于黄金比例,则称x是 [a,b]上的一个黄金点或黄金分割点。
在一条线段上与黄金分割点对称的那个点当然也称为是黄金分割点。
区间[a,b]上的两个黄金分割点x1,x2的几何位置,其计算方法是:
x2=a+0.618(b-a)
x1=a+0.618(x2-a)=a+0.382(b-a)
在程序设计中,可以用符号常数GOLDEN来表示黄金比值x2=2.0/(51/2+1),并取 GOLDEN=0.618033988749895。
算法说明:
设f(x)是区间[a,b]上的单峰函数,我们可以按下面的方寻找f(x)在[a,b]上的极小值点x*的近似值。
先计算[a,b]上的两个黄金分割点x1,x2处的函数值y1=f(x1)和y2=f(x2),接下来再根据y1和y2的值决定进一步的操作。
若y1<y2,则在区间[a,x2]上求极小值点,此原来的x1已经是新区间上右边的一个黄金点,可改记为x2,相应的函数值也改记为y2,不难找到新区间的另一个黄金分割点x1,并得到相应的函数值y1。
若y1>y2,则可以在区间[x1,b]上用类似的方法求极小值点。
无论出现什么情况,搜索的范围缩小了38.2%,所以,经过有限步的计算,总能得到所需要的精度的近似解。
如图所示,为了求单峰函数y=f(x)区间[a,b]内的最小值点,首先找到[a,b]内的两个黄金点x1,x2,并比较函数值f(x1)和f(x2)。由于有f(x1)<f(x2),所以接下来只需找出[a,x2]内的另一个黄金点x3即可与x1作进一步的比较。
实例:
《数值计算》学习笔记(上)相关推荐
- 《商业洞察力30讲》学习笔记(上)
[洞察力]| 作者 / Edison Zhou 这是恰童鞋骚年的第197篇原创文章 学习洞察力,也是新时代IT人员的一门进阶必修课... 1学习背景 2019年下半年至今,在领导的推荐下学习了刘润老师 ...
- openCV4.0 C++ 快速入门30讲学习笔记(自用 代码+注释)详细版
课程来源:哔哩哔哩 环境:OpenCV4.5.1 + VS2019 目录 002.图像色彩空间转换 003.图像对象的创建与赋值 004.图像像素的读写操作 005.图像像素的算术操作(加减乘除4种不 ...
- openCV4.0 C++ 快速入门30讲学习笔记(自用 代码+注释)
课程来源:哔哩哔哩 环境:OpenCV4.5.1 + VS2019 目录 一.代码+注释 quickopencv.h quickdemo.cpp 源.cpp 二.相关图片 012.图像色彩空间转换(提 ...
- 张宇线代30讲学习笔记
行列式 行列式的性质 性质1:行列互换其值不变,即|A|=|AT| 行列式某行(列)元素全为零,行列式为零 若行列式中某行(列)元素有公因子k(k≠0),则可以提到外边去 行列式中某行(列)元素均是两 ...
- 视觉SLAM十四讲学习笔记-第二讲-开发环境搭建
专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 lin ...
- [视觉SLAM十四讲]学习笔记2-关于欧拉角和万向锁
[视觉SLAM十四讲]学习笔记2-关于欧拉角和万向锁 1 欧拉角 1.1 维基百科定义 1.2 ZYX欧拉角与rpy角 2 万向锁 2.1 万向节 2.1 万向锁的产生 1 欧拉角 1.1 维基百科定 ...
- MySQL实战45讲学习笔记
文章目录 MySQL实战45讲-学习笔记 01 基础架构:一条SQL查询语句是如何执行的? mysql逻辑架构 连接器 查询缓存 分析器 优化器 执行器 02 日志系统:一条SQL更新语句如何执行 r ...
- [视觉SLAM十四讲]学习笔记1-刚体运动之旋转矩阵与变换矩阵
[视觉SLAM十四讲]学习笔记1-刚体运动之旋转矩阵与变换矩阵 1点.向量和坐标系 2 坐标系间的欧式变换 2.1 欧式变换之旋转 2.2 欧式变换之平移 3 变换矩阵与齐次坐标 4 Eigen库的简 ...
- 视觉SLAM十四讲学习笔记-第七讲-视觉里程计-三角测量和实践
专栏汇总 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第 ...
- 视觉SLAM十四讲学习笔记-第七讲-视觉里程计-对极几何和对极约束、本质矩阵、基础矩阵
专栏系列文章如下: 专栏汇总 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLA ...
最新文章
- Loader 入门【Webpack Book 翻译】
- pandas索引复合索引dataframe数据、索引其中一个水平(level)的特定数据列(index a column of a level)
- python爬虫:get_text()等方法获取标签数据
- cv python 样例_【CV实战】OpenCV—Hello world代码示例
- POJ 2083 递归画分形图
- Linq 异常“此提供程序只支持对返回实体或投影(包含所有标识列)的有序查询使用 Skip()...”...
- 预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)
- 双线macd指标参数最佳设置_常用指标知多少(二)
- angularjs 上传
- grep 命令的 12 个实例
- pandas 合并所有列_Python学习:Pandas库
- 缓存类java_用Java写一个简单的缓存操作类
- Codeforces Round #460 (Div. 2)
- linux显示文件开头部分内容,一天一个linux基础命令之查看文件开头部分内容head...
- 经典面试题-Appium原理
- MPush安装部署应用
- PPT个人学习笔记(三)——模版背景的设计
- 视频接入AI平台技术方案
- 记一次扩容U盘修复(主控: ChipsBank(芯邦))
- jdk1.8新特性:stream流报错:stream has already been operated upon or closed
热门文章
- js书写原生ajax,JS 原生ajax写法
- vue 直传视频到阿里云OSS
- 【学习随记】Word域代码相关
- 移除word文档的域代码 remove all field codes of word
- cx_oracle 字符编码,cx_oracle访问处理oracle中文乱码问题
- ps2键盘测试软件,PS2键盘51测试程序1
- pytz 太平洋时区_使用pytz模块打印所有时区的Python程序
- 计算机上面的清除键是什么符号,电脑上删除键是哪一个
- 随机投影森林-一种近似最近邻方法(ANN)
- 辨认NPN三极管的三个管脚