Поэтому я пытаюсь реализовать следующее уравнение в качестве двумерного массива в Python:
u[i][j+1] = u[i][j] + dt*l*(u[i-1][j] - u[i][j]).
Вот код, который мне нужно сделать:
l = 0.3
n = 3
m = 100
dt = 3.0
T = 30
A = 20
t = np.arange(0, 100, 0.1)
def u0(A, t, T):
return (A/2)*(1 + np.sin((2*np.pi*t)/T))
u = np.zeros((n, m))
for j in range(m):
u[0][j] = u0(A,dt*j,T)
for i in range(0, n):
u[i][0] = 10
for i in range(1,n):
for j in range(m-1):
u[i][j+1] = u[i][j] + dt*l*(u[i-1][j] - u[i][j])
u01 = (A/2)*(1 + np.sin((2*np.pi*t)/T))
for i in range(1, n):
for j in range(m - 1):
plt.plot(t, u01, 'g-')
plt.plot((j), u[1][j+1], c = 'r', marker = '_')
plt.plot((j), u[2][j+1], c = 'b', marker = '_')
Функция сюжетане будет работать всякий раз, когда я пытаюсь получить маркеры 'r-' или 'b-' для последних двух графиков, это работает только для первого графика, поэтому я думаю, что сделал что-то не так при реализации массива.
Я просто не знаю, как строить 2D-массивы, и мне нужна помощь.
Для контекста это модель автомобиля, следующая за моделью, которую я пытаюсь смоделировать в Python.Где u0 - ведущая машина, u1 - следующая, и т. Д. J - шаг по времени, который n-й водитель проверяет, что делает машина перед ними.Функция для u0 - это поведение ведущего автомобиля, и это все, что нужно для того, чтобы выяснить поведение следующих автомобилей.