数值分析-----不动点迭代和牛顿迭代(Python),阿里面试暗示

import numpy as np

import matplotlib.pyplot as plt

def f(x):

return (x+1)**(1/3)

def fun(x,tol,maxit):

x0=x

xk=x0

k=1

while (True):

xk=(x0+1)**(1/3)

if (xk-x0)(xk-x0)<toltol:

print(‘Tolerance condition is satisfied:’+str(tol))

return xk

if k>maxit:

print(‘Maxiteration is satisfied:’+ste(maxit))

return xk

print(“iter:”+str(k)+“,xk=”+str(xk))

x0=xk

k=k+1

def main():

x=1.5

maxit=20

tol=1.0*10**(-4)

result=fun(x,tol,maxit)

print(result)

x=np.arange(1,3,0.01)

y=x

x1=result

plt.plot(x,y,‘b’)

plt.scatter(x1,f(x1),color=‘red’)

plt.xlabel(‘x’)

plt.ylabel(‘y’)

plt.show()

if name ==‘main’:

main()

结果:

iter:1,xk=1.3572088082974532

iter:2,xk=1.3308609588014277

iter:3,xk=1.325883774232348

iter:4,xk=1.324939363401885

iter:5,xk=1.3247600112927027

Tolerance condition is satisfied:0.0001

result= 1.3247259452268871

3 牛顿迭代


3.1 基本思想

       牛顿-拉夫逊法提出来的思路就是利用切线是曲线的线性逼近这个思想。太佩服这两个大佬了,简直是顶礼膜拜,他们这脑袋瓜子怎么就那么聪明呢!上面我们的不动点迭代没有了导数和原函数的关系,但是我们这里的牛拉法不仅有原函数和导数的关系,还迭代速度特别快(不动点迭代是一阶的,牛-拉是二阶的),下面我们用图形来一起看看:

        

随便找一个曲线上的A点(为什么随便找,根据切线是切点附近的曲线的近似,应该在根点附近找,但是很显然我们现在还不知道根点在哪里),做一个切线,切线的根(就是和x轴的交点)与曲线的根,还有一定的距离。牛顿、-拉夫逊们想,没关系,我们从这个切线的根出发,做一根垂线,和曲线相交于B点,继续重复刚才的工作:

之前说过,B点比之前A点更接近曲线的根点,牛顿、拉弗森们很兴奋,继续重复刚才的工作:

第四次就已经很接近曲线的根了:

经过多次迭代后会越来越接近曲线的根(下图进行了50次迭代,哪怕经过无数次迭代也只会更接近曲线的根,用数学术语来说就是,迭代收敛了)

3.2 案例及实现

用牛顿迭代法求方程 x^{3}-2x-2=0)在[0,2]之间的根,要求:\left | x_{k+1}-x_{k}\ \right |\leq 0.5X10^{-2}

代码(方法1):

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

def fun(x):

y = x ** 3 - 2 * x - 2

return y

def fun_diff(x):

y = 3 * x **(2) - 2

return y

def Netwon(x0, func, dfunc,eps):

x0=1.5

x = np.zeros(2)

x[0] = x0

x[1] = x0 - func(x[0]) / dfunc(x[0])

while np.abs(func(x[0])) > eps: # 在0附近

x[0] = x[1]

x[1] = x[0] - func(x[0]) / dfunc(x[0])

return x[1]

def main():

eps=10**(-3)

x = np.arange(-5, 5, 0.1)

y = fun(x)

x1 = Netwon(0, fun, fun_diff,eps) # 牛拉法求得的点

print(“迭代值为:”,x1)

plt.plot(x, y)

plt.xlim(-5, 5)

plt.ylim(-10, 50)

plt.scatter(x1, fun(x1), color=‘red’)

plt.xlabel(‘X’)

plt.ylabel(‘Y’)

plt.show()

if name == ‘main’:

main()

结果:

迭代值为: 1.7692923542960053

代码(方法2):

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
img

文末有福利领取哦~

👉一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。img

👉二、Python必备开发工具

img
👉三、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
img

👉 四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。(文末领读者福利)
img

👉五、Python练习题

检查学习结果。
img

👉六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
img

img

👉因篇幅有限,仅展示部分资料,这份完整版的Python全套学习资料已经上传

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

(https://img-blog.csdnimg.cn/a9d7c35e6919437a988883d84dcc5e58.png)

img

👉因篇幅有限,仅展示部分资料,这份完整版的Python全套学习资料已经上传

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-JM10QCuU-1712808506750)]

  • 28
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值