首页 > 其他分享 >【数学】以普通高中生的眼光深入牛顿迭代法

【数学】以普通高中生的眼光深入牛顿迭代法

时间:2024-02-03 22:56:27浏览次数:27  
标签:frac 函数 牛顿 高中生 迭代法 Rightarrow lambda

Newton's method for finding roots

目录

目录

前言&前置知识

  • 前置知识:导数的定义与基本运算

如今 whk 确确实实讲了牛顿法,就是那个切线求导数近似解,效率是二分法的忘了多少倍。

(不觉得这很酷吗)

那么牛顿迭代到底有没有比课本更深刻一点的东西捏。

如有错误请指出。

基础

我们已经知道,\(f'(x_0)\) 可以看作函数 \(f(x)\) 在 \(x=x_0\) 的切线斜率 \(k\),那么我们想要求一个方程的近似解时:

例如:求以下函数的根

\[\frac{x^3}{15}-\frac{3x^2}{5}+2x-\frac{12}{5}=0 \]

我们设 \(f(x)=\frac{x^3}{15}-\frac{3x^2}{5}+2x-\frac{12}{5}\),那么这个方程的近似解就是函数 \(f(x)\) 与 \(x\) 轴的交点的横坐标。

我们可以先随机 random 一个数 \(x_0\)(当然 \(x_0\) 越接近零点越好),在 \(x_0\) 上做一条切线,切线的斜率在某种意义上或许是可以代表函数增减趋势的,那么我们使得这条切线与 \(x\) 轴的交点设为 \(x_1\),如此,\(x_1\) 在某种意义上就更加“接近”零点。

如图:

似乎是懒了些

(个人认为,在原理上,这里的接近并非距离更加接近,而是更加接近函数图像在该点变化之前的点的横坐标,但是因为函数中 \(1\) 个 \(x\) 只对应 \(1\) 个 \(y\),成映射关系,不存在山路十八弯的情况,所以似乎大多时候是更接近零点)

因此我们可以得到一个数列 \({x_n}\),这个数列越来越接近零点,被称为“牛顿数列”。

如果 \(f(x)\) 在点 \((x_0,f(x_0))\) 处切线的斜率是 \(f'(x_0)\),则切线方程为:

\[y-f(x_0)=f'(x_0)(x-x_0) \]

在 \(f'(x_0)\neq 0\) 时,存在:

\[x_1=x_0-\frac{f(x_0)}{f'(x_0)} \]

即:

\[x_k=x_{k-1}-\frac{f(x_{k-1})}{f'(x_{k-1})} \]

牛顿迭代法的收敛率是平方级别,每次迭代后精确的数位会翻倍,其收敛性的证明请参考citizendium - Newton method Convergence analysis,这里不深入讨论,因为我不会

但是因为牛顿迭代法一般情况下只具有局部收敛性,所以当 \(x_0\) 在收敛区间内以平方速度收敛,距离平方根较远时则不能保证。

我们可以举一个例子,求解 \(x^3-x-1=0\) 在 \(x_0=1.5\) 附近的根。

函数大概长这样

计算过程如下:

\[\begin{aligned} &x_{k}=x_{k-1}-\frac{x_{k-1}^3-x_{k-1}-1}{3x_{k-1}^2-1}\\ &x_0=1.5\Rightarrow x_1=1.34783\\ &x_1=1.34783\Rightarrow x_2=1.32520\\ &x_2=1.32520\Rightarrow x_3=1.32472 \end{aligned} \]

那么如果我们将 \(x_0=0.5\) 呢?

我不想计算了,直接看函数图像如下:

这个图像也很抽象

本图像中 \(x\) 表示 \(x_k\),\(y\) 表示 \(x_{k+1}\)。

你发现其实 \(x_0=0.5\) 时, \(x_1\) 已经达到了惊人的三位数。

你发现一个很有趣的事,我们把其他两个函数放进来。

不知道你是否看出什么?

我自己想的就是,稳定的单调时其 \(x_{k+1}\) 的图像越平稳。

其他的没想到什么,毕竟我菜啊。

应用:手动开方

众所周知,因为心胸狭隘的河北不让带计算器,所以我们必须学会手动开方(?)

以上为我瞎扯,事实上手动开根一般情况下没有什么用处,仅在某些估值时可能用上。大部分情况下,背诵常用的根号值是更加经济的选择。

手动开方的方式不止牛顿迭代法,但我认为牛顿迭代法是简单且效率的。

我们不难想到这就是解 \(x^2=n\) 这个方程。

所以直接套上面的公式,容易得到:

\[x_i=\frac{x_i+\frac{n}{x_i}}{2} \]

它的精度很高,不信你自己试试。

这个代码还是比较好写的。

点击查看代码
double sqrt_newton(double n) {
  const double eps = 1E-15;
  double x = 1;
  while (true) {
    double nx = (x + n / x) / 2;
    if (abs(x - nx) < eps) break;
    x = nx;
  }
  return x;
}

优化:牛顿下山法

它的英文名字就叫 Newton down-hill method(

如上所言:

但是因为牛顿迭代法一般情况下只具有局部收敛性,所以当 \(x_0\) 在收敛区间内以平方速度收敛,距离平方根较远时则不能保证。

下山法的目的,就是保证迭代过程中 \(|f(x_{k+1})|<|f(x_k)|\) 恒成立。

在确保上式的情况下,我们如何让这个东西成立捏?

可以看看上面求解 \(x^3-x-1=0\) 在 \(x_0=1.5\) 附近的根时提到的图像。

我自己想的就是,稳定的单调时其 \(x_{k+1}\) 的图像越平稳。

只以普通高中生的眼光来看,我们现在是不太能证明的好像,只能姑且如下解释,毕竟我菜啊。

这是因为通过使 \(x_{k+1}\) 更接近 \(x_k\) ,我们可以更好地利用函数局部的线性性质来逼近函数的根。如果两个迭代点相距较远,可能会导致迭代过程发散或者收敛速度变慢。

因此我们令:

\[x'_{k+1}=x_k-\frac{f(x_k)}{f'(x_k)} \]

然后设一个下山因子 \(\lambda\),对其进行加权平均,加权平均的目的是为了更好地平衡初始点和迭代点之间的差异,以便更快地逼近函数的根。

\[x_{k+1}=\lambda x'_{k+1}+(1-\lambda)x_k\quad (0<\lambda\leq 1) \]

于是有:

\[x_{k+1}=x_k-\lambda\frac{f(x_k)}{f'(x_k)}\quad (0<\lambda\leq 1) \]

选择下山因子时可以从 \(\lambda=1\) 开始,然后依次 \(\lambda=\dfrac{1}{2}、\dfrac{1}{4}、\dfrac{1}{8}\dots\) 试算。

具体来说,就是当不满足 \(|f(x_{k+1})|<|f(x_k)|\) 时,我们称其为不满足下山条件,试算下山因子,否则我们称其满足下山条件,直接计算。

这时候我们再来计算:

\[\begin{aligned} &x_{k}=x_{k-1}-\frac{x_{k-1}^3-x_{k-1}-1}{3x_{k-1}^2-1}\\ &x_0=0.6\Rightarrow x_1=17.9\\ \end{aligned} \]

显然不满足下山条件,当 \(\lambda=\dfrac{1}{32}\) 时,\(x_1=1.140625\Rightarrow f(x_1)=-0.656643\),\(x_0=0.6\Rightarrow f(x_0)=-1.384\)。
满足 \(|f(x_{k+1})|<|f(x_k)|\)。

\[\begin{aligned} &x_0=0.6\Rightarrow x_1=1.140625\\ &x_1=1.140625\Rightarrow x_2=1.36181\\ &x_2=1.36181\Rightarrow x_3=1.32628 \end{aligned} \]

后面的都满足 \(\lambda=1\) 时下山,还是比较好算的。

闲话

毕竟是以普通高中生自习的方式进行的学习,有些地方没有理解透理解错了还请指出。

另外牛顿迭代法还有另一种优化方法:梯度下降法。有兴趣的可以查资料学习。

标签:frac,函数,牛顿,高中生,迭代法,Rightarrow,lambda
From: https://www.cnblogs.com/sonnety-v0cali0d-kksk/p/18005133/Newtons-method-for-finding-roots

相关文章

  • 牛顿迭代法求平方根
      publicclassCalcUtils{publicstaticvoidmain(String[]args){System.out.println(sqrt(8));}publicstaticdoublesqrt(doublec){if(c<0)returnDouble.NaN;doubleerr=1e-15;doublet=c;......
  • 多项式exp/牛顿迭代
    牛顿迭代解决的是这样一个问题:已知\(g(f(x))\equiv0\pmod{x^n}\)与\(g(x)\),求模\(x^n\)意义下的\(f(x)\)这个问题可以用倍增的方式解决。首先假设你知道了\(g(f(x))=0\)的常数项(一般都能很方便的知道)。然后,我们假设\(f_0(x)\)是模\(x^{\lceil\frac{n}{2}\rceil}\)......
  • 【Optimization in Operations Research 运筹学】牛顿法、高斯牛顿法、拟牛顿法与BFGS
    牛顿法\(F(x+\Deltax)=F(x)+F'(x)\Deltax+\frac{1}{2}F''(x)\Deltax^2\)泰勒展开之后保留二次项然后对展开式再进行求导令导数等于0直接得到前进的步长和方向即\(Hx=b\)这里的\(x\)就是牛顿法求解的前进步长和方向。如何理解呢?加\(\Deltax\)之后得到的解析式再对\(x......
  • 拟牛顿法
    1拟牛顿法牛顿法:$$x_{k+1}=x_k-\nabla^2f(x_k)^{-1}\nablaf(x_k)$$牛顿法的缺陷在于\(\nabla^2f(x_k)\)难以求取和存储,因此有拟牛顿法(Quasi-Newtonmethods),通过在牛顿法的迭代中加入近似求取每一步\(Hessian\)矩阵的迭代步,仅通过迭代点处的梯度信息来求取\(Hessian......
  • [最优化方法笔记] 牛顿法与修正牛顿法
    1.牛顿法1.1梯度下降法的缺点对于无约束优化问题:\[\min_{x\in\mathbb{R}^n}f(x)\]使用梯度下降法进行迭代:\[x^{k+1}=x^k-\alpha_k\nablaf(x^k)\]梯度下降的基本策略式沿着一阶导数的反方向(即最速下降方向)迭代。然而,当\(\text{Hessian}\)矩阵\(\nabla^2f(x......
  • 农村高中生源转型期提升学生二次函数建模能力的课堂探究
      在新课程下,培养学生的数学核心素养是高中数学课堂教学的根本任务。其中的建模思想是数学核心素养培养的一个基本指标,是学生正确认识数学知识内在本质与原理的重要思维工具。通过在数学课堂教学中有效地应用建模思想,主要的应用意义体现在如下几个方面:其一,通过在数学课堂中融......
  • 农村高中生源转型期提升学生二次函数建模能力的课堂探究
        通过结合具体的数学问题,引导高中生深入分析问题,有效地构建求解问题的数学模型,可以使学生逐步掌握数学问题求解的基本思路以及模型建构的方法与注意事项。但是离开了反复训练,无法从根本上提升高中生的数学建模能力。因此,在平时的高中数学教学中,教师要注意结合数学教学的......
  • 牛顿法、割线法、二分法
    1clear;clc;2%%牛顿法3f=@(x)x^4-4*x^2+4;%函数4df=@(x)4*x^3-8*x;%一阶导数5ddf=@(x)12*x^2-8;%二阶导数6N=1000;%最大迭代次数7x=zeros(N,1);%储存迭代点8x(1)=log(8);%初始点9eps=0.00001;%容许误差1011%迭代过程12fork=2:1:N13x(k)......
  • 高中生怎样进行试卷分析最有效?
    进行试卷分析对于高中生来说是非常重要的,它可以帮助他们了解自己的学习状况、发现学习问题以及改进学习方法。以下是一份详细的试卷分析指南,供高中生参考。1.获取试卷和成绩首先,学生需要获得期中考试的试卷和成绩单。这可能需要通过老师或者学校教务处的协助来完成。2.创建......
  • 什么是迭代(迭代法)
    一.基本阐述大家有时会将迭代和递归搞混,但是他们其实是有差别的。递归,就是在运行的过程中调用自己。迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题。迭代算法是用计算机解决问题的一种基本方法,一般用于数值计......