【问题标题】:FOURTH DERIVATIVE - My graph is wrong, please let me know my mistake四阶导数 - 我的图表是错误的,请告诉我我的错误
【发布时间】:2020-08-30 09:09:01
【问题描述】:

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

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

这是图表:

此代码基于以下公式:

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

PD:对不起,如果我弄错了一个词,请告诉我。谢谢。

【问题讨论】:

    标签: python python-3.x matplotlib math graph


    【解决方案1】:

    您显示的打印公式不正确。 (我希望它没有出书。)

    系数应该是(来自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 偏移量以将它们分开之后):

    说明:
    我认为更有趣的是,对于有限差分方程,所有系数都需要加到零。知道了这一点,一眼就能看出打印出来的方程式是不正确的。另一个也是最初的关键是注意到你正在绘制一个余弦,但幅度很大。是什么让它如此巨大?可能将常规大小的数字 (~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]
    

    【讨论】:

    • 非常感谢,我终于可以解决这个问题了。
    • 是的,我正在学习这些主题,所以感谢您的解释和不同的计算方式。
    猜你喜欢
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    • 2020-10-10
    • 1970-01-01
    • 2020-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多