分类
专业课程 学习记录

牛顿法求零点

寒假时曾与一同学钻研优化,现在只依稀记得求零点的方法有牛顿法。近日有学妹询问一道C语言题目,可以通过这个方法解决。

python可视化方便呈现效果。

题目

底发生

思路

百度百科,牛顿法

大致思路是:先求那个方程在x=b处的切线,切线在x轴的交点b1进行下一轮迭代

——那这里的迭代次数怎么确定啊?

c语言是有一个定义的, 1e-6   就相当于0了;就是方程在bn的值
的绝对值小于1e-6即可

代码

from matplotlib.pyplot import *
import numpy as np

def f(x):
    return a*x*x+np.sin(x)
def f_prime(x):
    return 2*a*x+np.cos(x)

x=np.asarray([i/100-10 for i in range(2000)])
y=f(x)

plot(x,y)
plot(b,0,'ro')
plot((-10,10),(0,0))
savefig('before.jpg')
y0=f(b)
while(np.fabs(y0)>10e-6):
    b=-y0/y_prime(b)+b
    y0=f(b)

plot(x,y)
plot(b,0,'ro')
plot((-10,10),(0,0))
savefig('after.jpg')

发表评论

邮箱地址不会被公开。 必填项已用*标注