寒假时曾与一同学钻研优化,现在只依稀记得求零点的方法有牛顿法。近日有学妹询问一道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')
