二分法
1.二分法思路
假设给定的函数是f(x)=(x-2)^3,二分法首先要求函数是单调的,然后选择一个可行的区间[left,right],其中f(left)<0,f(right)>0,然后选择区间的中点middle,若z左侧函数值乘以中点处的函数值小于0,则说明零点在[left,middle],否则在[middle,right]。
2.二分法代码实现
def f(x):
return pow(x-2,3)
def binaryMethod(left,right):
middle=(left+right)/2
time=-1
if f(middle)==0:
print("方程的解为:" + str(middle))
return time,middle
while abs(f(middle))>1e-6:
middle=(left+right)/2
if f(left)*f(middle)<=0:
right=middle
else:
left=middle
time+=1
print(time,middle)
return time,middle
if __name__=='__main__':
binaryMethod(0,10)
3.结果截图
牛顿迭代法
1.牛顿迭代法思路
这个图借用了别人的。首先确定一个起始点x0,计算出x0点处曲线的切线,切线与x轴有个交点x1,x1作为下一次迭代的起点,依次循环直到f(xn)无限逼近于0,xn可以根据牛顿迭代公式算出。
2.牛顿迭代法代码实现
def f(x):
return pow(x-2,3)
def df(x):
return 3*pow(x-2,2)
def newtonMethod(x):
time=-1
while abs(f(x))>1e-6:
x=x-f(x)/df(x)
time+=1
print(time,x)
return time,x
if __name__=='__main__':
print(newtonMethod(0))