首页 > 其他分享 >牛顿法近似求解

牛顿法近似求解

时间:2024-04-09 12:11:36浏览次数:11  
标签:迭代 求解 公式 fmt 牛顿 近似 零点

牛顿法

牛顿法使用方程 \(f(x)\) 的泰勒级数的前几项来寻找 \(f(x)=0\) 的解。
首先选择一个接近 \(f(x)\) 零点的横坐标 \(x_0\),计算 \(f(x_0)\) 及其斜率 \(f'(x_0)\),穿过点 \((x_0,f(x_0))\) 以斜率 \(f'(x_0)\) 做一条直线,获得直线与 x 轴交点 \(x_1\),通常 \(x_1\) 会比 \(x_0\) 更接近零点,一次方法不断迭代即可逼近零点的解。
推导公式化简后得到的迭代公式如下:

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

在开方中的应用

对于 \(g(x)=x^2\),我们给定任意 \(g(x)\),求解 x 的值,相当于求解 \(x^2-g(x)=0\)。

此处为什么写成 \(g(x)-x^2=0\)?其实是一样的,令 \(f(x)=g(x)-x^2\) 和 \(f(x)=x^2-g(x)\),其导数 \(f'(x)\) 只有符号上的差异,导入迭代公示后负负得正,会得到一样的迭代公式。

根据上述迭代公式,我们令 \(f(x)=x^2-g(x)\),此时对于任意给定的 \(g(x)\),或者说 y 值,我们使用牛顿法求其开方只要将其带入上述迭代公式,则有 \(x_{n+1}=x_n - \frac{x^2-g(x)}{2x}\),注意 g(x) 为给定值,是一个常数
由此我们就可以写出牛顿法的代码,此处给出 Go 的示例:

package main

import (
	"fmt"
)

func Sqrt(y float64) float64 {
	x := 1.0
	for i:= 0; i < 10; i++ {
		x -= (x*x - y) / (2*x) // z 就是上述迭代公式中的 x,x 则是 g(x)
		fmt.Println(x)
	}
	return x
}

func main() {
	fmt.Println(Sqrt(2))
}

标签:迭代,求解,公式,fmt,牛顿,近似,零点
From: https://www.cnblogs.com/RubySIU/p/18123563

相关文章

  • 【Java业务需求解决方案】分布式锁应用详情,多种方案选择,轻松解决,手把手操作(非全数
    目录背景:解决方案:分布式锁方案一(不建议,但原理得懂):Redis锁setnx与业务代码处理雏形代码产生问题一:锁释放问题代码改造:锁添加过期时间产生问题二:锁被别的线程误删代码改造:添加setnx锁请求标识防勿删产生问题三:递归容易造成内存溢出代码改造:递归改造while循环产生......
  • 如何进行快速求解大数是否是11的倍数证明(如果奇数位数字和与偶数位数字和的差是11的倍
    当一个数的奇数位上数字和与偶数位上数字和的差是11的倍数时,这个数就是11的倍数。这个性质可以通过数学归纳法和模运算的性质来证明。观察模运算的性质首先,观察到对于任意正整数k,10^k对11取模的结果是循环的:......
  • FJSP:蜣螂优化算法( Dung beetle optimizer, DBO)求解柔性作业车间调度问题(FJSP),提供MAT
    一、柔性作业车间调度问题柔性作业车间调度问题(FlexibleJobShopSchedulingProblem,FJSP),是一种经典的组合优化问题。在FJSP问题中,有多个作业需要在多个机器上进行加工,每个作业由一系列工序组成,每个工序需要在特定的机器上完成。同时,每个机器一次只能处理一个工序,且每个工......
  • FJSP:霸王龙优化算法(Tyrannosaurus optimization,TROA)求解柔性作业车间调度问题(FJSP),提供
    一、柔性作业车间调度问题柔性作业车间调度问题(FlexibleJobShopSchedulingProblem,FJSP),是一种经典的组合优化问题。在FJSP问题中,有多个作业需要在多个机器上进行加工,每个作业由一系列工序组成,每个工序需要在特定的机器上完成。同时,每个机器一次只能处理一个工序,且每个工......
  • 算法学习笔记——暴力求解之枚举
    算法学习笔记——暴力求解之枚举枚举枚举是指对每个可能的解进行逐一判断,直到找到符合题目要求的答案。枚举类的题目本身并不复杂,但在采取枚举策略之前,一定要好好的分析题目的枚举量,枚举量过大的时候,需要选择其他的解决方法。即使问题适合枚举,也要进行分析,以便通过减少部分无效......
  • 实验6-1 近似求PI
    本题要求编写程序,根据下式求π的近似值,直到最后一项小于给定精度eps。2π​=1+31!​+3×52!​+3×5×73!​+⋯+3×5×⋯×(2×i+1)i!​+⋯输入格式:输入在一行中给出精度eps,可以使用以下语句来读输入:scanf("%le",&eps);输出格式:在一行内,按照以下格式输出π的近似值(保留小......
  • 欧几里得算法求解GCD
    GCD(最大公约数)欧几里得算法(辗转相除法)原理if(a%b==0)GCD=belseGCD=b%(a%b)基本情况:如果其中一个数为0,则另一个非零数一定就是两数的GC......
  • C语言实现牛顿迭代法(Newton-Raphson Method)
    目录前言A.建议B.简介一代码实现二时空复杂度A.时间复杂度B.空间复杂度C.总结三优缺点A.优点:B.缺点:C.总结:四现实中的应用前言A.建议1.学习算法最重要的是理解算法的每一步,而不是记住算法。2.建议读者学习算法的时候,自己手动一步一步地运行算法。B.......
  • 100-4 移动零(简单) (每日一题 Java求解)
    方法一:数零覆盖法解题思路:使用循环数出0的个数,把非零数按照顺序重新覆盖数组,剩下几个零就在末尾补几个零。方法二:双指针法使用双指针,左右指针初始化为0,当右指针指向的数不为0时,交换左右指针的值,并且左指针右移一位,保证左指针指向的值的左边都是非零数;当右指针指向的数为......
  • 机器视觉学习(十一)—— 最小矩形和圆形区域、近似轮廓、凸包
    目录一、最小矩形区域与最小圆形区域 1.1 cv2.minAreaRect()函数1.2 cv2.minEnclosingCircle()函数1.3 最小矩形区域与最小圆形区域示例二、显示近似轮廓2.1 cv2.approxPolyDP()函数2.2显示近似轮廓示例代码2.2.1简约版 2.2.2 进阶版 三、显示凸包3.1 ......