牛顿迭代法

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

 

目录

一、牛顿迭代公式

二、利用牛顿迭代公式求平方根

C 语言实现

Python 语言实现 

三、利用牛顿迭代公式求立方根

C 语言实现

Python 语言实现


 


一、牛顿迭代公式

多数方程不存在求根公式,因此求精确根非常困难,甚至不可解,从而寻求方程的近似根就显得尤为重要。牛顿就提出了一种用迭代求方程近似根的方法,思路是不断取切线,用线性方程的根逼近非线性方程 f(x) = 0 的根

具体过程

设 x* 是 f(x) = 0 的根,选取 x0 作为 x* 的初始近似值,过点 (x0,f(x0)) 作曲线 y = f(x) 的切线 L,L:y = f(x0) + f'(x0)(x - x0),则 L 与 x 轴交点的横坐标为:gif.latex?x_1%20%3D%20x_0%20-%20%5Cfrac%7Bf%28x_0%29%7D%7Bf%27%28x_0%29%7D,称 x1 为 x* 的一次近似值。过点 (x1, f(x1)) 作曲线 y = f(x) 的切线,切线与 x 轴的交点横坐标为:gif.latex?x_2%20%3D%20x_1%20-%20%5Cfrac%7Bf%28x_1%29%7D%7Bf%27%28x_1%29%7D,称 x2 为 x* 的二次近似值。重复上述过程,得 x* 的近似值序列,其中:gif.latex?x_%7Bn+1%7D%20%3D%20x_n%20-%20%5Cfrac%7Bf%28x_n%29%7D%7Bf%27%28x_n%29%7D 称为 x* 的 n + 1 次近似值,上式称为牛顿迭代公式

概述图

fca93d38ec264b41a788103e8cc48660.png

 

 

二、利用牛顿迭代公式求平方根

求数 a 的平方根,即求二次方程 f(x) = x^2 - a = 0(a >= 0)的根,f'(x) = 2x,利用牛顿迭代公式,则有: gif.latex?x_%7Bn+1%7D%20%3D%20x_n%20-%20%5Cfrac%7Bx_n%5E2%20-%20a%7D%7B2x_n%7D%20%3D%20%5Cfrac%7B1%7D%7B2%7D%28x_n%20+%20%5Cfrac%7Ba%7D%7Bx_n%7D%29

C 语言实现

#include <stdio.h>
#include <math.h>

double square_root(double a)
{
	if (a < 0)
	{
		return -1;
	}
	double t = a;  // t 为近似值
	while (fabs(t * t - a) > 1e-10)
	{
		t = (t + a / t) / 2.0;
	}
	return t;
}

int main()
{
	double a = 0.0;
	scanf("%lf", &a);
	double ret = square_root(a);
	printf("%lf\n", ret);
	return 0;
}

fabs(t * t - a) > 1e-10:是将方程的近似值 t 代入方程 f(x) = x^2 - a 中,判断绝对误差是否小于等于 1e - 10。  

Python 语言实现 

def square_root(a):
    if a < 0:
        return -1
    t = a
    while abs(t * t - a) > 1e-10:
        t = (t + a / t) / 2.0
    return t


print(square_root(3))  # 1.7320508075688772
print(square_root(5))  # 2.236067977499978
print(square_root(10))  # 3.162277660168379
print(square_root(-10))  # -1

 

 

三、利用牛顿迭代公式求立方根

同理,求数 a 的立方根,即求三次方程 f(x) = x^3 - a = 0 的根,f'(x) = 3x2,利用牛顿迭代公式,则有: gif.latex?x_%7Bn&plus;1%7D%20%3D%20x_%7Bn%7D%20-%20%5Cfrac%7Bx_n%5E3-a%7D%7B3x_n%5E2%7D%20%3D%20%5Cfrac%7B1%7D%7B3%7D%282x_n%20&plus;%20%5Cfrac%7Ba%7D%7Bx_n%5E2%7D%29

C 语言实现

#include <stdio.h>
#include <math.h>

double cube_root(double a)
{
	double t = a;
	while (fabs(t * t * t - a) > 1e-10)
	{
		t = (2 * t + a / (t * t)) / 3.0;
	}
	return t;
}

int main()
{
	double a = 0.0;
	scanf("%lf", &a);
	double ret = cube_root(a);
	printf("%lf\n", ret);
	return 0;
}

Python 语言实现

def cube_root(a):
    t = a
    while abs(t * t * t - a) > 1e-10:
        t = (2 * t + a / (t * t)) / 3.0
    return t


print(cube_root(3))  # 1.4422495703074112
print(cube_root(5))  # 1.7099759466766973
print(cube_root(10))  # 2.154434690031893
print(cube_root(-10))  # -2.154434690031893

 

 

 

 

 

【Matlab】牛顿迭代实现 文章目录题目:牛顿迭代程序1:牛顿迭代通用函数程序2:最大Delta程序3:观察结果 题目:牛顿迭代 程序1:牛顿迭代通用函数 function [x] = newton(x0,epsilon,f,print_flag) digits(10) % 控制牛顿迭代的运算精度,精度太大迭代速度过慢 syms x f(x) = f; df(x) = diff(f); count = 0; e = 1; while abs(e) > epsilon x1 = vpa(x0 阅读详情

相关推荐

牛顿迭代Newton’s Method)迭代根的Python程序

参考链接: 用python算微积分及牛顿迭代解高阶方程 不用迭代,直接得到高次方程的解: from sympy import * from sympy.abc import x def func(x): return x**3 - 0.165*x**2 + 3.993*10**(-4) result = solve(func(x),x) print(result) 结果: [-0.0437370862084818 + 0.e-24*I, 0.0623775815137495 + 0.e-22*

Fo*(Bi)的博客 5万+

c语言详解牛顿迭代以及解倒数和平方根

牛顿迭代Newton's method)又称为牛顿-拉夫逊(拉弗森)方Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似解方程的方牛顿迭代实质是一种算法,这意味着它的目标是找到函数 f(x)=0 的值 x。在几何上可以将其视为 x 的值,这时函数与 x 轴相交。

发狂的小花的博客 2186

轻松理解牛顿迭代且用其平方根

牛顿迭代概述 牛顿迭代Newton’s method)又称为牛顿-拉弗森方Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似解方程的方牛顿迭代公式 设rrr是f(x)=0f(x)=0f(x)=0的根,选取x0x_0x0​作为rrr的初始近似值。 过点(x0,f(x0))(x_0, f(x_0))(x0​,f(x0​))做曲线y=f(x)y=f(x)y=f(x)的切线L1L_1L1​,L1:y=f(x0)+f′(x0)(x−x0)L_1:y =

KISS 1万+

牛顿迭代-matlab实现

牛顿迭代-matlab实现 牛顿迭代简介: 牛顿迭代又称为切线,简单来说就是不断切线与x轴的交点,来逐渐接近解的迭代过程。方使用函数f(x)的泰勒级数的前面几项来寻找方程f(x) = 0的根。具体迭代的方可以看度娘的解释,或者相关的教材。今天来介绍下简单的matlab的实现。 代码实现: 使用了三个.m文件来实现,分别是原函数(需要迭代的函数)文件、牛顿迭代函数文件、和实现的主文件。...

qq_43587460的博客 5万+

MATLAB牛顿迭代

MATLAB牛顿迭代、梯度下降 牛顿迭代: 通过函数 f(x)=0\ f(x) =0 f(x)=0的泰勒级数展开  f(x)=f(x0)+f′(x0)1!(x−x0)+f′′(x0)2!(x−x0)2+...+f(n)(x0)n!(x−x0)n\ f(x) =f(x_0) +\frac {f'(x_0)} {1!}(x-x_0)+\frac {f''(x_0...

qq_33866593的博客 1万+

Logistic回归:牛顿迭代

Logistic回归与牛顿迭代很早之前介绍过《无约束的最优方》里面介绍了梯度下降牛顿迭代等优化算法。同时大家对于Logistic回归中的梯度下降更为熟悉,而牛顿迭代对数学要更高,所以这里介绍如何在Logistic回归问题中使用牛顿迭代。似然函数与代价函数似然函数则是 L(ω)=Πmi=1[g(xi)]yi[1−g(xi)]1−yiL(\omega) = \Pi_{i=1}^m[g

Mr.Phoebe的专栏 9267

牛顿迭代python_python 牛顿迭代

使用牛顿迭代方程在x附近的一个实根。赋值X,即迭代初值;用初值x代入方程中计算此时的f(x)=(a * x * x * x + b * x * x + c * x + d)和f’(x)=(3 * a * x * x + 2 * b * x + c)计算增量f(x)/f’(x);计算下一个x: x-f(x)/f’(x);把新产生的x替换 x: x=x-f(x)/f’(x),循环;若d绝对值大于0...

weixin_30158471的博客 4403

Logistic回归与牛顿迭代

在上一篇文章中,我讲述了Logistic回归的原理以及它的梯度上升实现。现在来研究Logistic回归的另一种 实现,即牛顿迭代。   在上篇文章中,我们出Logistic回归的似然函数的偏导数为                    由于是一个多元函数,变元是,多元函数极值问题以前已经讲过,参考如下文章   链接:http://blog.csdn.net/acdream

ACdreamer 1万+

算法牛顿迭代的下山改进

在本文中,我们来讨论牛顿迭代的改进方案之一——下山

OI博客 1129

二元牛顿迭代matlab,Matlab编写二分牛顿迭代

谈到单根区间上方程根的近似算法,我们第一印象就是高中的时候接触的二分,正如其名称,二分就是通过每次把f(x)的零点所在小区间收缩一半的方,使区间的两个端点逐步迫近函数的零点,以得零点的近似值。大概步骤如下:假定f(x)在区间(x,y)上连续先找到a、b属于区间(x,y),使f(a),f(b)异号,说明在区间(a,b)内一定有零点,然后f[(a+b)/2],现在假设f(a)<0,f...

weixin_34417272的博客 4209

如何计算根号之牛顿迭代

之前上课时,老师提出了一个问题,在不借助自带函数的情况下,如何使用数学方计算带根号的数字,并将其精确到小数点后3位,而最近正好阅读到了牛顿迭代相关的内容,废话不多说,开始。 而牛顿迭代的精华就是下列公式,这里不多介绍数学上的原理,而注重于实现 举个例子,假设有一个函数为y = x*x -5,要找到x最其根值,即令y=0,从而出x为正负根号5, 那么如何让根号5精度到小数点后几位就...

qq_36035111的博客 9979

python牛顿迭代根例题_1.3根之牛顿迭代

目录[TOC]前言今天我们讲的是具有收敛速度快,能重根的解方程之牛顿迭代。(一)牛顿迭代的分析1.定义迭代公式如下:迭代函数是:由于 与原方程 等价。当 时,就是的近似解。该方称为牛顿迭代。2.条件f(x)函数是连续可导函数。f(x)在局部收敛,当时,局部收敛。注意:牛顿迭代的局部收敛性,很依赖于初始值的取。也就是说,初始值的选取,决定该区域的收敛性。3.思想其总思想还是迭代的...

weixin_39540020的博客 2940
上一篇: 为什么 rand 函数生成的是伪随机数?
下一篇: 详解关于青蛙跳台阶的两个问题
melonyzzZ
博客等级 码龄5年 1028粉丝 227原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值