牛顿下山法
# -*- coding: utf-8 -*-
"""
Created on Wed May 8 20:16:34 2019
@author: xh216
"""
def f(m):
return m*m*m-m-1
def f1(m):
return 3*m*m-1
x=[]
x.append(0.5)#初始值
eps=1e-14 #精度
fx=abs(f(x[-1]))
number_iteration=0
F=[]
F.append(fx)
L=[]
while fx>eps: #与误差值比较
lambd=1
df=f(x[-1])/f1(x[-1])
x1=x[-1]-lambd*df
fx=abs(f(x1))
number_iteration=number_iteration+1#叠加次数
while fx>=F[-1]: #与上一个比较
lambd=lambd/2
x1=x[-1]-lambd*df #x k+1
fx=abs(f(x1))
number_iteration=number_iteration+1
F.append(fx)
x.append(x1)
L.append(lambd)
print('牛顿下山法迭代次数为%f次'%(number_iteration))
print('方程的根x*为\n', x[-1])
print('f(x*)的值为\n', F[-1])
弦截法
# -*- coding: utf-8 -*-
"""
Created on Wed May 8 20:57:46 2019
@author: xh216
"""
def f(x):
return x*x*x-x-1
x=[0.6,0.5] #2个初始值
eps=1e-14
fx=[]
fx.append(f(x[-2]))
number_iteration=0
while abs(fx[-1])>eps:
fx.append(f(x[-1]))
x.append(x[-1]-f(x[-1])/(fx[-1]-fx[-2])*(x[-1]-x[-2]))#x k+1
number_iteration=number_iteration+1
print('弦截法法迭代次数为%f次'%(number_iteration))
print('方程的根x*为\n', x[-1])
print('f(x*)的值为\n', fx[-1])
时间 2019/5/8