我正在使用python来计算f(x)=cos(x)的正向,中心和向后有限差。我可以让他们在每次迭代中以设定的步长(h)运行时绘制图。然而,我的主要任务是将有限差分方法的每次迭代的步长减少两倍。这是我尝试做的循环,但它没有工作。
h = 5
while h > 0.0005:
h = h / 2
这是我的代码,其中它具有恒定的步长,我试图将其更改为每次迭代减少2倍。
import numpy as np
import matplotlib.pyplot as plt
f = lambda x: np.cos(x)
h=5
#Forward Difference
dff1=(f(x+h)-f(x))/h
plt.plot(x,dff1,'-b')
#Backward Difference
dff1=(f(x)-f(x-h))/h
plt.plot(x,dff1,'-r')
#Central Difference
dff1=(f(x+h)-f(x-h))/(2*h)
plt.plot(x,dff1,'-g')
#plot
plt.xlabel('x')
plt.ylabel('y')
plt.legend(["FFD","BFD","CFD"])
plt.grid()
plt.show()
我仍然是编码新手,所以如果这是一个简单的问题,请不要对我太苛刻!我感谢任何可以提供的帮助或建议!!:)
假设您在while循环体内绘制了图(使用h),你说的话应该管用。
详细说明:
import numpy as np
import matplotlib.pyplot as plt
f = lambda x: np.cos(x)
x=np.linspace(-np.pi, np.pi, num=50) #x should be initialized. this line was missing.
h=5
while h > 0.0005:
h = h/2. #starts at 5/2 for the first iteration. 5/4 for the second,..etc
#Forward Difference
dff1=(f(x+h)-f(x))/h
plt.plot(x,dff1,'-b')
#Backward Difference
dff1=(f(x)-f(x-h))/h
plt.plot(x,dff1,'-r')
#Central Difference
dff1=(f(x+h)-f(x-h))/(2*h)
plt.plot(x,dff1,'-g')
#plot
plt.xlabel('x')
plt.ylabel('y')
plt.legend(["FFD","BFD","CFD"])
plt.grid()
plt.show() #the next iteration won't start until you close the window.