方程举例"/>
牛顿法解方程举例
def cal(f,step,x0,ret):'''f 方程 step 精度 x0 初始值 ret 方程目标值'''f2=lambda x: f(x)-ret #转化方程f3=lambda x: x+step/(1-f2(x+step)/f2(x)) #转化方程的切线 求与 X轴交点x1=f3(x0)# y1=f2(x1)return x1def test1(ret):def f1(x):return 5*x*x+x-5print('y=5*x*x+x-5')x0=0for i in range(10):x1=cal(f1,0.000001,x0,ret)y1=f1(x1) if abs(y1-ret)<0.000001:print('x,y',x1,y1)breakx0=x1
def test2():import mathdef f2(x,y):'''点M(x,y) 到 点 A(0,0) 的距离比到点 B(0,1)的距离的2倍少1'''MA=math.sqrt(x*x+y*y) #到点A的距离MB=math.sqrt( x*x+(y-1)*(y-1) )return MA-2*MB+1lt=[i/200 for i in range(0,1000)]rtlt=[]for j in lt:x0=0.1y0=jdef f3(x):return f2(x,y0)for _ in range(20):ret=0x1=cal(f3,0.000001,x0,ret)y1=f3(x1)if abs(y1-ret)<0.000001: rtlt.append([x1,y0])breakx0=x1import matplotlib.pyplot as pltxl=[i[0] for i in rtlt]yl=[i[1] for i in rtlt]plt.figure()ax=plt.gca()ax.scatter(xl,yl,1)plt.show()def test3():import mathdef f2(x,y):return 3*x*x+4*y*y+-5*x*y-6*x-7*y+8lt=[i/100 for i in range(0,1000)]rtlt=[]for j in lt:x0=-0.1y0=jdef f3(x):return f2(x,y0)for _ in range(50):ret=0x1=cal(f3,0.000001,x0,ret)y1=f3(x1)if abs(y1-ret)<0.000001: rtlt.append([x1,y0])breakx0=x1import matplotlib.pyplot as pltxl=[i[0] for i in rtlt]yl=[i[1] for i in rtlt]plt.figure()ax=plt.gca()ax.scatter(xl,yl,1)plt.show()test1(0)
test1(20)
test2()
test3()#要点是 如果 有 x y两个变量. 要先分析变量值的定义域 合理选择范围
#在定义范围内,将一个变量做成列表枚举
#另一个变量求解,然后做成值对,画图# 简单举例 未考虑 0 除问题
更多推荐
牛顿法解方程举例
发布评论