我正在尝试使用 python 绘制一维波动方程的参考解。
上面的链接说明如下:对于固定在右端并在左端自由并在左端受到锤击的杆s 其中锤击引起恒定速度从发生,位移如下:
和
在哪里, 是位移,和是初始速度的距离发生。
看来作者用过在而不是使用为波速?这让我很困惑,但我的直觉告诉我
对于标准化杆位移使用前 100 个正常模式(即) 并选择, 这就是我们得到的
现在编码python:
import matplotlib.pyplot as plt
from numpy import *
plt.ion()
n = 100
L = 25
a = 2.5
E = 100
rho = 1
V0 = 3
c = (E/rho)**0.5
x = linspace(0, L, 100)
u = []
ti = 1.28*L/c
for xi in x:
SUM = 0
for i in range(1,n+1,1):
Ai = V0*a*2*sin((i-0.5)*a*pi/L)/(c*pi*(i-0.5)**2*pi*a/L)
SUM = SUM+Ai*cos((i-0.5)*pi*xi/L)*sin((n-0.5)*pi*ti/(L/c))
u.append(SUM)
u = [x * (c/V0*a) for x in u]
plt.plot(x/L,u)
plt.show()
产生以下情节:
这实际上与上面的正确情节无关。
我已经检查并重新检查了方程式。我不确定我哪里出错了,希望这不是作者提供的错误?最重要的是最终结果,所以我希望我正确实施它?请帮忙。
编辑
根据下面的答案,这里是工作代码。
import matplotlib.pyplot as plt
from numpy import *
plt.ion()
n = 100
L = 25
a = 2.5
E = 100
rho = 1
V0 = 3
c = (E/rho)**0.5
x = linspace(0, L, 100)
u = []
ti = 1.28*L/c
for xi in x:
SUM = 0
for i in range(1,n+1,1):
Ai = V0*a*2*sin((i-0.5)*a*pi/L)/(c*pi*(i-0.5)**2*pi*a/L)
SUM = SUM+Ai*cos((i-0.5)*pi*xi/L)*sin((i-0.5)*pi*ti/(L/c))
u.append(SUM)
u = [x * (c/V0/a) for x in u]
plt.plot(x/L,u)
plt.show()


