Я не уверен, как реализовать мой 2D-массив, который - PullRequest
0 голосов
/ 20 февраля 2019

Поэтому я пытаюсь реализовать следующее уравнение в качестве двумерного массива в 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 - это поведение ведущего автомобиля, и это все, что нужно для того, чтобы выяснить поведение следующих автомобилей.

1 Ответ

0 голосов
/ 20 февраля 2019

Если вы измените c='r' на c='r-', тогда matplotlib попытается интерпретировать r- как цвет, поэтому он выдаст ошибку.

Я не уверен на 100% в желаемом результатено я думаю, что вы можете полностью удалить петли для построения графика, определив j=np.arange(m-1):

# The rest of your code remains the same

j = np.arange(m-1)

plt.plot(t, u01, 'g-')
plt.plot(j, u[1][j + 1], 'r-')
plt.plot(j, u[2][j + 1], 'b-')

plt.show()

, что дает мне:

enter image description here

...