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 案例及实现
用牛顿迭代法求方程 )在[0,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开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
文末有福利领取哦~
👉一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
👉二、Python必备开发工具
👉三、Python视频合集
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
👉 四、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。(文末领读者福利)
👉五、Python练习题
检查学习结果。
👉六、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
👉因篇幅有限,仅展示部分资料,这份完整版的Python全套学习资料已经上传
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
(https://img-blog.csdnimg.cn/a9d7c35e6919437a988883d84dcc5e58.png)
👉因篇幅有限,仅展示部分资料,这份完整版的Python全套学习资料已经上传
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-JM10QCuU-1712808506750)]