Как бы я использовал функцию Pyplot в Python? - PullRequest
0 голосов
/ 03 апреля 2020

У меня проблемы с отображением результатов после завершения программы. Я ожидаю увидеть график зависимости скорости от положения, но по какой-то причине он не отображается. Что-то не так с моим кодом?

import numpy 
from matplotlib import pyplot 
import time,sys


#specifying parameters

nx=41 # number of space steps
nt=25  #number of time steps
dt=0.025 #width between time intervals
dx=2/(nx-1) #width between space intervals 
c=1 # the speed of the initial wave



#boundary conditions
u = numpy.ones(nx) 
u[int(0.5/dx):int(1/(dx+1))] = 2

un = numpy.ones(nx)

#initializing the velocity function
for i in range(nt):
un= u.copy()
for i in range(1,nx):
    u[i]= un[i] -c*(dt/dx)*(u[i]-u[i-1])


pyplot.xlabel('Position')
pyplot.ylabel('Velocity')
pyplot.plot(numpy.linspace(0,2,nx),u)

1 Ответ

1 голос
/ 03 апреля 2020

Здесь происходит несколько вещей

  1. Вам не нужно указывать полное имя импортируемых пакетов. Вы можете просто использовать псевдонимы для вызова этих пакетов и использовать их с этими псевдонимами позже. Это, к примеру.

    import numpy as np
    
  2. Ваша инициализация значения dx даст вам 0, потому что вы делите 2 на 40, что даст вам ноль. Вы можете инициализировать значение dx, сделав одно из значений в этом выражении плавающим, так что-то вроде этого.

    dx=float(2)/(nx-1) #width between space intervals 
    

Как и в законе Меуколма в комментариях, предложенных в комментариях, добавьте pyplot.show (), чтобы показать график. Это то, что отредактированная версия вашего кода понравится

import numpy as np
import matplotlib.pyplot as plt 
import time,sys


#specifying parameters

nx=41 # number of space steps
nt=25  #number of time steps
dt=0.025 #width between time intervals
dx=float(2)/(nx-1) #width between space intervals 
c=1 # the speed of the initial wave



#boundary conditions
u = np.ones(nx) 
u[int(0.5/dx):int(1/(dx+1))] = 2
un = np.ones(nx)

#initializing the velocity function
for i in range(nt):
    un= u.copy()
for i in range(1,nx):
    u[i]= un[i] -c*(dt/dx)*(u[i]-u[i-1])


plt.xlabel('Position')
plt.ylabel('Velocity')
plt.plot(np.linspace(0,2,nx),u)
plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...