绘制二维求和函数时出现问题



我目前正在进行一个关于天线群理论的项目。我开始从连续的平面孔径分布发展成形图案的理论。下一步是在数量不多的辐射元件上发展这一理论。

我们应该考虑一个具有圆形边界的平面孔径,该孔径由具有N_{m}辐射器的m个同心圆族切割而成。使用圆坐标并应用一些简单的代数,我们可以得到这个双变量函数:

$F(\theta,\phi(=4\sum_{m=1}^{20}\sum_{n=1}^{m}I_{m}\cdot\cos\left[\frac{\pi(2m-1(}{4}\cdot\cos\left(\frac(2n-1(\pi}{4 m}\right(\sin sin(\ttheta(\sin(\phi(\right]$

m是圆的数量(在这种情况下为20(,N_{m}=4m个元素,I_{N}是电流,它对每个圆都有一定的值,φ和θ是球面坐标角(分别取从-\pi到\pi和从0到\pi的值(。

事实上,我想在三维图上表示这个函数。我将解释我迄今为止所做的努力。

我决定将\phi和\theta定义为numpy数组,每个数组有50个值。然后我决定创建一个20x20的零矩阵,在这里进行双和计算。然后我用双循环定义了双和。

我使用的代码如下:

from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
p=np.linspace(-np.pi, np.pi, 50) #phi angle
t=np.linspace(0,np.pi,50)        #theta angle
F=np.zeros((20,20))              #matrix 
I=np.array([1,0.961,0.851,0.689,0.510,0.377,0.360,0.429,0.497,0.521,0.494,0.427,0.340,0.257,0.199,0.178,0.181,0.191,0.200,0.204]) # I current array
for i in range(20):
for j in range(i):
F[i,j]= 4*I[i]*np.cos(np.pi*(2(i+1)-1)/4 * np.cos(np.pi*(2*(j+1)-1)/(4(j+1))) * np.sin(t)* np.cos(p)) * np.cos(np.pi*(2(i+1)-1)/4 * np.sin(np.pi*(2*(j+1)-1)/(4(j+1))) * np.sin(t)* np.sin(p))

ax = plt.axes(projection='3d')
ax.plot_surface(p, t, F, rstride=1, cstride=1,
cmap='viridis', edgecolor='none')
ax.set_title('surface');
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('F')

当运行文件时,我有以下类型错误:"t"对象不可调用

我不知道出了什么问题,也不知道如何改进程序以获得图形,甚至使其更有效率。

您的代码中有一个拼写错误:

F[i,j]= 4*I[i]*np.cos(np.pi*(2(i+1)-1)/4 * np.cos(np.pi*(2*(j+1)-1)/(4(j+1))) * np.sin(t)* np.cos(p)) * np.cos(np.pi*(2(i+1)-1)/4 * np.sin(np.pi*(2*(j+1)-1)/(4(j+1))) * np.sin(t)* np.sin(p))

在那一行,你有一个打字错误,应该是:

F[i,j]= 4*I[i]*np.cos(np.pi*(2*(i+1)-1)/4 * np.cos(np.pi*(2*(j+1)-1)/(4*(j+1))) * np.sin(t)* np.cos(p)) * np.cos(np.pi*(2*(i+1)-1)/4 * np.sin(np.pi*(2*(j+1)-1)/(4*(j+1))) * np.sin(t)* np.sin(p))

你基本上错过了4个*


编辑:

这修复了您的错误,但是,您会得到另一个错误,因为F[i,j]描述了一个元素,但t,因此np.sin(t)由50个元素组成,这些元素不适合您提供的索引。

你做这件事的方式是不必要的复杂。试试这个:

  1. 循环变量thetaphi,以及求和
  2. 然后使用CCD_ 7求和,而不是使用复数矢量化。如果你了解它是如何工作的,你可以在以后为了速度而改变它

相关内容

  • 没有找到相关文章