【发布时间】:2018-05-03 18:42:23
【问题描述】:
下面是我的代码,我应该使用电场方程和给定的变量来创建方程的密度图和曲面图。我得到“图像数据的无效维度”可能是因为函数 E 采用多个变量并试图将它们全部显示为多个维度。我知道问题是我必须将 E 变成一个数组才能显示密度图,但我不知道该怎么做。请帮忙。
import numpy as np
from numpy import array,empty,linspace,exp,cos,sqrt,pi
import matplotlib.pyplot as plt
lam = 500 #Nanometers
x = linspace(-10*lam,10*lam,10)
z = linspace(-20*lam,20*lam,10)
w0 = lam
E0 = 5
def E(E0,w0,x,z,lam):
E = np.zeros((len(x),len(z)))
for i in z:
for j in x:
E = ((E0 * w0) / w(z,w0,zR(w0,lam)))
E = E * exp((-r(x)**2) / (w(z,w0,zR(w0,lam)))**2)
E = E * cos((2 * pi / lam) * (z + (r(x)**2 / (2 * Rz(z,zR,lam)))))
return E
def r(x):
r = sqrt(x**2)
return r
def w(z,w0,lam):
w = w0 * sqrt(1 + (z / zR(w0,lam))**2)
return w
def Rz(z,w0,lam):
Rz = z * (1 + (zR(w0,lam) / z)**2)
return Rz
def zR(w0,lam):
zR = pi * lam
return zR
p = E(E0,w0,x,z,lam)
plt.imshow(p)
【问题讨论】:
-
E在您的情况下是一维的。为了显示为图像,它需要是二维或三维的。 -
不确定您到底想做什么,但您的问题可能从这里开始
E = ((E0 * w0) / w(z,w0,zR(w0,lam)))。您正在将使用np.zeros创建的二维数组重新分配给一维数组。此外,您从未使用过i和j。您是否尝试单独分配数组的每个值?如果是这样,你必须索引它(比如E[0][1]is row0 col1) -
啊,所以 E 应该是 x 和 z 维度,并且应该使用我在函数 E() 中尝试做的电场函数绘制,但我不是确定如何做到这一点
标签: python arrays function numpy matplotlib