对于四阶导数,这是我的代码:
import numpy as np
import matplotlib.pyplot as plt
pi=np.pi
x=np.arange(0,5*pi,0.03*pi)
y=np.cos(x)
h=x[4]-x[3]
"fourth derivative"
#first formula
der41=[]
x41=[]
for i in range(2,len(y)-2,1):
der41.append((y[i+2]-4*y[i+1]+6*y[i]-4*y[i-1]+y[i-2])/(h**4))
x41.append(x[i])
der41=np.array(der41)
x41=np.array(x41)
#Second formula
der42=[]
x42=[]
for i in range(3,len(y)-3,1):
der42.append((-y[i+3]+12*y[i+2]+39*y[i+1]+56*y[i]-39*y[i-1]+12*y[i-2]+y[i-3])/(6*h**4))
x42.append(x[i])
der42=np.array(der42)
x42=np.array(x42)
plt.plot(x,y,'g',x41,der41,'r',x42,der42,'b')
plt.title("Cuarta derivada")
plt.xlabel("Eje X")
plt.ylabel("Eje Y")
plt.grid()
plt.show()
这是图表:
此代码基于以下公式:
所有三个图形都应该是相同的“形状”
对不起,如果我弄错了一个词,请告诉我。多谢各位
您显示的打印公式不正确。(我希望这不是出自一本书。)
系数应为(从wikipedia):
这将给出(在向曲线添加0.1偏移以分离曲线后):
说明:
我认为更有趣的是,对于有限差分方程,所有的系数都需要加到零。知道了这一点,你一眼就能看出打印出来的方程式是不正确的。另一个,也是最初的,关键是注意到你正在绘制一个余弦,但其大小是巨大的。是什么让它如此巨大?可能将一个规则大小的数字(~1)除以
h**4
,其中h
很小。考虑到这一点,事实上,在有限差分计算中总是这样,我意识到系数之和必须加到零(这是我说的一个规则,但实际上我只是编出来的,虽然我认为这可能是某个地方的一个规则),这显然不是印刷公式的情况。此外,一维有限差分公式通常是对称的,如果系数是对称的,可能每个项上都必须有符号,因此,这是印刷公式不正确的另一个迹象。(我说这一切都是假设你正在学习这些主题,并且认为展示这只是常识类型的推理是有用的,没有什么疯狂或深奥的。)努比:
最后,我会注意到,如果您将所有内容都保存在numpy中,那么这将运行得更快,更易于编写,占用更少的内存,等等,例如:
相关问题 更多 >
编程相关推荐