四阶导数我的图错了,请告诉我我的错误

2024-09-29 21:28:51 发布

您现在位置:Python中文网/ 问答频道 /正文

对于四阶导数,这是我的代码:

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()

这是图表:

enter image description here

此代码基于以下公式:

enter image description here

所有三个图形都应该是相同的“形状”

对不起,如果我弄错了一个词,请告诉我。多谢各位


Tags: 代码inimportforasnppiplt
1条回答
网友
1楼 · 发布于 2024-09-29 21:28:51

您显示的打印公式不正确。(我希望这不是出自一本书。)

系数应为(从wikipedia):

-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]

这将给出(在向曲线添加0.1偏移以分离曲线后):

enter image description here

说明:
我认为更有趣的是,对于有限差分方程,所有的系数都需要加到零。知道了这一点,你一眼就能看出打印出来的方程式是不正确的。另一个,也是最初的,关键是注意到你正在绘制一个余弦,但其大小是巨大的。是什么让它如此巨大?可能将一个规则大小的数字(~1)除以h**4,其中h很小。考虑到这一点,事实上,在有限差分计算中总是这样,我意识到系数之和必须加到零(这是我说的一个规则,但实际上我只是编出来的,虽然我认为这可能是某个地方的一个规则),这显然不是印刷公式的情况。此外,一维有限差分公式通常是对称的,如果系数是对称的,可能每个项上都必须有符号,因此,这是印刷公式不正确的另一个迹象。(我说这一切都是假设你正在学习这些主题,并且认为展示这只是常识类型的推理是有用的,没有什么疯狂或深奥的。)

努比:
最后,我会注意到,如果您将所有内容都保存在numpy中,那么这将运行得更快,更易于编写,占用更少的内存,等等,例如:

der42 = (-y[6:] + 12*y[5:-1] - 39*y[4:-2] + 56*y[3:-3] - 39*y[2:-4] + 12*y[1:-5] - y[:-6])/(6*h**4)
x42 = x[3:-3]

相关问题 更多 >

    热门问题