Катание на волне Численные схемы для гиперболических PDE, уроки lorena barba, требуется помощь - PullRequest
0 голосов
/ 09 декабря 2018

Я начинающий пользователь Python, который пытается почувствовать информатику, я изучал, как использовать ее, изучая концепции / предметы, с которыми я уже знаком, такие как вычислительная механика жидкости и анализ методом конечных элементов,Я получил степень в области машиностроения, поэтому не очень хорошо разбираюсь в CS.

Я изучаю серию работ Лорены Барба о просмотрщике ноутбуков jupyter, Практические численные методы, и мне нужна помощь, надеюсь, кто-нибудь знакомыйс предметами CFD & FEA в целом.

Если вы нажмете на ссылку ниже и перейдете к следующей строке вывода, вы найдете то, что у меня ниже.Действительно запутался в этом блоке кода, работающем в определенной функции.

Во всяком случае.Если есть кто-нибудь, с любыми предложениями о том, как заняться изучением Python, ПОМОГИТЕ

В [9]

rho_hist = [rho0.copy()]
rho = rho0.copy()            **# im confused by the role of this variable here**
for n in range(nt):

    # Compute the flux.

    F = flux(rho, *args)

    # Advance in time using Lax-Friedrichs scheme.

    rho[1:-1] = (0.5 * (rho[:-2] + rho[2:]) -
                 dt / (2.0 * dx) * (F[2:] - F[:-2]))

    # Set the value at the first location.

    rho[0] = bc_values[0]

    # Set the value at the last location.

    rho[-1] = bc_values[1]

    # Record the time-step solution.

    rho_hist.append(rho.copy())

return rho_hist

http://nbviewer.jupyter.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/03_wave/03_02_convectionSchemes.ipynb

1 Ответ

0 голосов
/ 09 декабря 2018

Целью первых двух строк является сохранение rho0 и предоставление его копий для истории (копировать, чтобы последующие изменения в rho0 не отражались здесь), а также в качестве начального значения для «рабочего»переменная rho, которая используется и изменяется во время вычислений.

Исходная информация заключается в том, что список питона и переменные массива всегда являются ссылками на рассматриваемый объект.Присваивая переменную, вы создаете копию ссылки, адрес объекта, но не сам объект.Обе переменные относятся к одной и той же области памяти.Таким образом, отсутствие .copy() изменит rho0.

a = [1,2,3]
b = a
b[2] = 5
print a
#>>> [1, 2, 5]

Составным объектам, которые сами содержат объекты структурированных данных, потребуется deepcopy для копирования данных на всех уровнях.

...