Моделирование волны на струне с питоном - PullRequest
0 голосов
/ 23 октября 2019

Я моделирую волну, распространяющуюся вдоль одномерной струны длиной L = 20. Вот следующие требования:

  1. Концы строки имеют значения x = 0 и X = L и должны оставаться фиксированными на 0 на время моделирования, которое должно длиться при Tmax =30.

  2. Мы должны предположить, что волна изначально следует за «импульсным» профилем: y0 (0) = exp (-k (x-x0) ^ 2) где x0 - начальныйначальное местоположение импульса и должно быть x0 = 10, k = 2.

  3. Мы должны принять скорость волны c = 1 и выбрать значения dt и dx, где (cdt / dx) ^2 меньше или равно 0,25.

Я должен показать временную эволюцию струны и показать, как она отражается от границ и демонстрирует конструктивные и разрушительные помехи.

Вот что у меня так далеко. Дает мне график, но верх острый.

L = 20 
T = 30 
k = 2 
dx = 0.2 
c = 1 
dt = 0.1
x0 = 10 
r = (c*dt)/dx
x = np.arange(0, L, dx)
t = np.arange(0, T, dt)
y_past = np.exp(-k*(x-x0)**2)
y_current = np.exp(-k*(x-x0)**2)
y_future = np.zeros(len(x))

for j in range(2,len(x)-1):
    y_future[j] = 2*(1-r**2)*y_current[i]-y_past[i] + r**2*(y_current[i+1]+y_current[i-1])
    for n in range(2,len(t)-1):
        if(n%20==0):
            plt.plot(x,y_future)
            plt.xlim(0,1.5)
        y_past = y_current 
        y_current = y_future

Есть ли какие-либо предложения для моего текущего кода, которые могут сделать эту работу? Я получаю ошибку индексации, и график не выглядит как гладкая волна и выглядит заостренным вверху. Благодарю.

...