Верхом на волне Численные схемы для гиперболических УЧП, уроки Лорены Барба, нужна помощь

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

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

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

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

In[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


person Leonardo Parra García    schedule 09.12.2018    source источник
comment
Вы не задали ни одного вопроса.   -  person b-fg    schedule 09.12.2018


Ответы (1)


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

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

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

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

person Lutz Lehmann    schedule 09.12.2018
comment
Благодаря тонну! С этим простым примером становится намного понятнее :) - person Leonardo Parra García; 12.12.2018
comment
@LeonardoParraGarcía еще один способ сказать огромное спасибо! это добавить голос, они бесплатны! :-) - person uhoh; 06.01.2019