乘风破浪 双曲偏微分方程的数值方案,lorena barba 课程,需要帮助

Riding the wave Numerical schemes for hyperbolic PDEs, lorena barba lessons, assistance needed

我是初学者 python 正在尝试了解计算机科学的用户,我一直在学习如何使用它 concepts/subjects 我已经熟悉了,例如作为计算流体力学和有限元分析。我是机械工程学位,所以CS背景不多。

我正在研究 Lorena Barba 关于 jupyter notebook viewer 的系列文章“实用数值方法”,我正在寻找一些帮助,希望是熟悉 CFD 和 FEA 主题的人。

如果您单击下面的 link 并转到下面的输出行,您会在下面找到我的内容。真的对在定义的函数内运行的这段代码块感到困惑。

无论如何。如果有人在那里,对如何解决学习有任何建议 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

前两行的目的是保留 rho0 并为历史提供它的副本(复制以便以后 rho0 中的更改不会反映在这里)并作为初始在计算过程中使用和修改的 "working" 变量 rho 的值。

背景是 python 列表和数组变量始终是对相关对象的引用。通过分配变量,您会生成引用的副本、对象的地址,但不会生成对象本身。两个变量都引用相同的内存区域。因此不使用 .copy() 将改变 rho0.

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

本身包含结构化数据对象的复合对象将需要 deepcopy 来复制所有级别的数据。

  • how to pass a list as value and not as reference?