牛顿迭代法的简单实现(python)

50 篇文章 4 订阅
12 篇文章 0 订阅
'''
牛顿法很多人写了一大通感觉非常的高大上,其实想法很简单,我们目标就是找函数的零点
比如你选了一个起始点x = a , y  = f(a) 这个点相比于零点假如说是有距离的。
那么你会发现在这个x = a 点处求一个切线方程,这个切线方程的截距距离零点更近。
ok, 于是l(x) = f(a) + f'(a)(x - a) ---> x = a - f(a) / f'(a) 目的是求’截距‘
'''

# 我们求解 f(x) = x2的函数的零点值  初始点我们选x = 4, 这是一个迭代算法哦

x = 4
for i in range(50):
    x = x - x**2 / (2 * x)
    print('x={}, f(x) = {}'.format(x, x**2))

# 很多时候我们不知道一个函数在某个点的导数是多少, 比如上面的2 * x =f'(x)
'''
我们用导数的定义求f'(x)
'''
x = 4

for i in range(50):
    x = x - x**2 / (((x+0.00001) **2 - x**2) / 0.00001)
    print('x={}, f(x) = {}'.format(x, x ** 2))
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
牛顿迭代法是一种用来求解方程的迭代方法,可以用来求解非线性方程组或单变量方程的根。其基本思想是,通过利用函数的导数信息来逼近函数的零点。下面是一个使用Python实现牛顿迭代法来求解方程的示例代码: ```python def newton(f, df, x0, tol=1e-6, max_iter=100): """ Implementation of Newton's method for finding roots of a function """ x = x0 for i in range(max_iter): fx = f(x) if abs(fx) < tol: return x dfx = df(x) if dfx == 0: return None x = x - fx/dfx return None ``` 其中,f是要求解的方程,df是f的导函数,x0是初始值,tol是迭代收敛的容差,max_iter是最大迭代次数。这个函数会返回方程的一个根(如果存在),或者返回None(如果迭代达到了最大次数或者无法收敛)。 下面是一个示例: ```python import math # 定义要求解的方程及其导数 f = lambda x: math.sin(x) - x/2 df = lambda x: math.cos(x) - 1/2 # 使用牛顿迭代法求解方程的根 root = newton(f, df, x0=1) # 输出结果 if root is not None: print("The root of the equation is:", root) else: print("Failed to converge to a root of the equation.") ``` 这个例子是求解方程sin(x) - x/2 = 0在x=1附近的一个根,输出结果为: ``` The root of the equation is: 0.8767262153954871 ``` 牛顿迭代法实现还有很多细节需要注意,比如如何选择初始值、如何处理无法收敛的情况等等。但是这个基本框架可以作为一个起点来理解牛顿迭代法的思想和实现方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值