【问题标题】:Filling a 3D Array and Plotting the Values填充 3D 数组并绘制值
【发布时间】:2021-03-20 04:14:32
【问题描述】:

我想用 Python 编写一个代码来评估密度分布 p(x,y) 的时间演变。初始条件为p(t=0,x,y)=exp[-((x-500)^2)/500],解的公式如下代码:t-time index, i-space index(x方向),j空间索引(y方向),v=0.8

我的目标是运行该方案 10 次迭代,并在最后一个时间步 (t=9) 绘制结果。我得到的是一个用零填充的大数组。我认为这是因为我没有正确使用 3D 数组,有人有什么建议吗?谢谢。

我的尝试:

import numpy as np
import matplotlib.pyplot as plt

#Input Parameters
Nx = 1000 #number of grid points in x-direction
Ny = 500 #number of grid points in y-direction
T = 10 #number of time steps
v = 0.8

p = np.zeros((T,Nx,Ny))
P = np.zeros((T,Nx,Ny))

for t in range(0,T-1):
    for i in range(0,Nx-1):
        for j in range(0,Ny-1):
            P[t,i,j] = p[t,i,j]-((v/2)*(p[t,i+1,j]-p[t,i,j]))
            p[0,i,j] = np.exp(((-1*(i-500))**2)/500)


x = P[9,i]
y = P[9,j]
print(x)
plt.plot(x,y)
plt.xlim([0,1000]) 
plt.ylim([0,500]) 
plt.xlabel('x-direction')
plt.ylabel('y-direction')
plt.title("Density Distribution After 10 Iterations")

【问题讨论】:

  • 你确定你的公式是正确的吗? p[t,i,j]-((v/2)*(p[t,i+1,j]-p[t,i,j])) 始终为 0,np.exp(((-1*(i-500))**2)/500) 非常大
  • 您好,感谢您指出这一点。为了提出问题,我试图简化公式,因为实际公式很长。初始条件 np.exp(((-1*(i-500))**2)/500) 应表示以 x=500 为中心的窄垂直脉冲(最大值 = 1,最小值 = 0)。作为参考,真正的公式是二维平流方程的 Lax-Wendroff 解:P[t,i,j] = p[t,i,j]-((v/2)*(p[t,i, j+1]-p[t,i,j]))-((v/2)*(p[t,i+1,j]-p[t,i,j]))+(((v 2)/2)*(p[t,i,j+1]-(2*p[t,i,j])+p[t,i,j-1]))+((( v2)/2)*(p[t,i+1,j]-(2*p[t,i,j])+p[t,i-1,j]))跨度>
  • 所以我可以用虚拟常数替换它们,看看其余的是否正确?
  • 是的,我认为这是个好主意。谢谢。
  • 尝试评论您的代码。索引似乎有错误。我注意到的一些错误是 1) p[0, i, j] 为什么是 0?从逻辑上讲应该是 t 2) p[0,i,j] = np.exp(((-1*(i-500))**2)/500) 这个表达式应该在其他表达式之前 3) P 是一个 3D 数组,你选择 x 的方式,即 x = P[9, i] and y = P[9, j] 似乎不正确 4) range(0, T-1)表示 range(0,9) 而你永远不会达到 9 所以 P[9,...] 肯定是零

标签: python arrays numpy plot colormap


【解决方案1】:

看起来您只填写了在 T=8 处停止的值 for t in range(0,T-1),而您正在尝试获取 x = P[9,i]。他们永远不会被填满,所以很明显他们都是 0。

尝试使用range(0, T),它会遍历0,1,2,...,T-1。还要改range(0,Nx), range(0,Ny)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-10
    • 2018-10-05
    • 1970-01-01
    • 2015-06-11
    • 2013-04-22
    • 2020-09-16
    • 1970-01-01
    • 2018-11-30
    相关资源
    最近更新 更多