首页 > 其他分享 >1-1.2 数值方法B 续

1-1.2 数值方法B 续

时间:2024-10-29 15:00:35浏览次数:4  
标签:1.2 导数 牛顿 数值 区间 收敛 方法 迭代 函数

1-1.2 数值方法B 续

求解非线性方程

一般地,对一个方程求解,就是令\(f(x)=0\)。那么,解方程就意味着找到方程的根(root)。

有很多求解非线性方程的方法,它们一般有两种分类;

  • 区间法/夹逼法:选择一个区间,该区间的两端函数值的符号相反,然后逐步缩小区间以逼近根。
    这种方法总能收敛,但收敛速度较慢。
  • 开区间法:只需要一个初始猜测值,然后使用迭代公式逼近根。
    这种方法计算速度快,但不保证收敛:如果初始猜测不够好,可能导致找不到根或发散。

以下是几种常见的求解非线性方程根的数值方法:

  1. 二分法:区间法,即通过逐渐缩小一个已知包含根的区间来逼近解。

  2. 牛顿-拉夫森法:开区间法。

  3. 割线法:牛顿法的改进版,它无需计算导数,而是通过两点的割线来近似导数,其迭代公式为:

    \[x_{n+1}=x_n-\frac{f(x_n)(x_n-x_{n-1})}{f(x_n)-f(x_{n-1})} \]

  4. 布伦特法:结合了二分法的稳健性和牛顿法的快速收敛性,在函数符号发生变化的区间内,逐步收缩区间,同时采用类似牛顿法的二次插值以加速收敛。

牛顿-拉夫森法

image

使用该法的基本步骤:

  1. 选择初始猜测解\(x_i\)​

  2. 对函数\(f(x)\)进行一阶泰勒展开:
    ​\(f_T(x)=f(x_i)+f^{\prime}(x_i)(x-x_i)\)
    表示\(x_i\)处的线性近似。
    目标是找到使得\(f(x)=0\)成立的x值,因此令\(f_{T}(x)=0\):

    \[0=f_T(x_{i+1})=f(x_i)+f^{\prime}(x_i)(x_{i+1}-x_i) \]

    \[x_{i+1}=x_i-\frac{f(x_i)}{f^{\prime}(x_i)} \]

    这就是牛顿-拉夫森法的迭代公式。

  3. 在\(x_i\)处,计算函数斜率\(f^{'}(x_i)\),回代进上述迭代公式以更新迭代。

该法的一些陷阱(pitfalls):

  1. 初始猜测\(x_0\)必须接近实际根;

  2. 收敛依赖于函数的性质:
    image

    • 接近拐点:函数的导数\(f^{'}(x)\)接近0,特别是在\(f^{''}(x)=0\)时,迭代过程可能由于导数过小,步长过大,算法跳出根附近的区域,进而无法收敛,如图a;
    • 接近极值点:接近极大值或极小值时,迭代过程可能在不同点之间来回震荡(如图b),可能跳到另一个不相关的根(如图c),还可能完全发散(如图d)。
  3. 没有类似二分法的区间保证,因此无法收敛时,可能发散,导致迭代步伐越走越远;

  4. 需要计算函数的导数,对一些复杂函数而言可能非常麻烦,或者导数本身在某些点附近非常小,甚至为0,导致算法失败。

应对措施:

  1. 设置最大迭代次数,防止算法进入无限循环或发散;
  2. 检查\(|f(x_{n})|\)的大小,确保其逐渐趋近于0;
  3. 尝试其他数值方法。

标签:1.2,导数,牛顿,数值,区间,收敛,方法,迭代,函数
From: https://www.cnblogs.com/yukibvvd/p/18513272/112-numerical-method-b-continuation-f0k3s

相关文章

  • 1-1 数值方法B
    1-1数值方法B非稳态扩散方程主体公式\[\frac{\partial(\rhoc_pT)}{\partialt}=\frac{\partial}{\partialx}\Big(\lambda\frac{\partialT}{\partialx}\Big)+S(x,t,T)\]该式左边为时间导数,表示某一点的能量随时间的变化;右边为空间变化,描述热在空间扩散的过程。其边界条......
  • k8s 1.28.2 集群部署 Thanos 对接 MinIO 实现 Prometheus 数据长期存储
    目录什么是ThanosThanos的主要功能Thanos的架构组件Thanos部署架构SidecarReceive架构选择开始部署部署架构创建namespacenode-exporter部署kube-state-metrics部署Prometheus+Thanos-Sidecar部署固定节点创建label生成secretMinIO配置etcd证书启动Prometheus+Th......
  • 7.1 在区间[0,10]上等间距取1000个点Xi(i为下标,i=1,2,3,...,1000),并计算在这些点Xi处函
    importnumpyasnpimportscipy.interpolateasspiimportscipy.integrateasspi_integratedefg(x):return((3x**2+4x+6)*np.sin(x))/(x**2+8*x+6)x_values=np.linspace(0,10,1000)y_values=g(x_values)spline=spi.CubicSpline(x_values,y_v......
  • UE 设置高精度DEM的方法(UE中地形呈阶梯状的解决办法)
    使用UE创建地形,不可避免要使用dem作为地形,来创建数字孪生项目。可是,会碰到一个问题:使用png导入的地形,有明显的阶梯状,如下图所示:阶梯状DEM所以是什么原因呢?答:DEM数据本就如此。1、常规非涉密的DEM,是大于等于30米,也就是30米×30米的一个方形,变成一个值,还保留int类型,自然会有至少......
  • NGINX 1.20.1版安装stream模块
    NGINX于1.9.0版本开始支持stream模块来代理tcp连接。在Centos操作系统若前期以YUM方式安装了nginx,后期想要添加stream模块。1.首先需要检查nginx版本是否支持这一特性,若已支持可直接安装模块,否则重装。2.其次按照如下步骤(部分步骤仅做参考,未必需要执行)2.1安装CentOS的epel-releas......
  • FPGA图像处理仿真:生成数据源的方法
    免责声明:本文所提供的信息和内容仅供参考。作者对本文内容的准确性、完整性、及时性或适用性不作任何明示或暗示的保证。在任何情况下,作者不对因使用本文内容而导致的任何直接或间接损失承担责任,包括但不限于数据丢失、业务中断或其他经济损失。读者在使用本文信息时,应自行验......
  • zblog获取tag列表函数GetTagList参数和使用方法介绍说明
    函数位置:zblogphp.php文件,大约2641行。函数参数:$select:数组,获取指定数据。$where:数组,数据获取限制规则。$order:数组,数据获取排序规则。$limit:数组,获取数据数量限制。$option:数组,附加限制选项,可用来获取指定范围内的数据。函数输出:输出一个数组。示例:{......
  • 强化学习的数学原理-05蒙特卡洛方法
    目录MCBasicMCExploringStartsMCEpsilon-GreedyMCBasic从\(model\:base\:\)的\(Reinforcement\:learning\:\)过渡到\(model\:free\:\)的\(\:Reinforcement\:learning\:\)最难以理解的是怎么在没有模型的情况下去估计一些量。这里面就有一个重要的\(\:idea......
  • 帝国CMS隔色换色列表页样式加分隔线实现方法
    隔行换色使用默认的列表循环代码,并在每个列表项中添加不同的样式类。[!--empirenews.listtemp--]<liclass="a"><!--list.var1--></li><li><!--list.var2--></li>[!--empirenews.listtemp--]设置每次显示的参数为2,以实现隔行换色。隔5行加分隔线在每5个列......
  • 部署nginx-1.26.2
    1.前置工作1.1下载包zlib-1.3.1.tar.gzopenssl-3.2.2.tar.gzpcre2-10.44.tar.gznginx-1.26.2.tar.gz2.创建目录#创建⽬录mkdir-p/data/nginx/logschmod755/root#重要配置chown-Rroot:root/data/nginx3.解压安装包#前提条件,取决于nginx版本问题,由于⽐较......