我想绘制一个悬挂在地面可变高度“h”的天线电场的3D图形。 我写了下面的代码,但似乎没有用。
%% Simulation for an lamda/2 antenna suspended with a height from distance group with a variable h
%% Plotting: electrif field, radiated power, intensity and directivity in 3D
clc
clear all
close all hidden
%% Defining givens:
f= 300e6; %% Chosen frequency
c= 3e8; %% Free space
lambda= c./f; %% Wavelenght
l_2=lambda./2;
k= (2.*pi)./l_2; %% Wave number
Io=5; % Chosen maximum value of the current
eighta=377; % Intrinsic impedance (free space)
r=l_2/(2.*pi); % Distance
h= 0:1:100; %% Variable height from the ground
L=1.25*l_2; % Dipole length
theta= 2*pi;
%% Computing the requirements:
%% Electric field:
A= (k.*L.*Io.*exp(-1i.*r.*k))./(4.*pi.*r);
B= 2.*(cos(cos(theta).*k.*h));
E_F= eighta.*1i.*(A).*sin(theta).*(B);
[x,y,z]=sph2cart(h,theta,E_F); % Converting to cartesian coordinates
% Generating 3D plot
surf(x,y,z)
colormap(JET);
title ('Electric Field in 3D plot')
legend ('Heigth','Theta','Electric Field')
rotate3D on
axis image
我似乎遇到了这个错误:
??? Error using ==> surf at 78
Z must be a matrix, not a scalar or vector.
答案 0 :(得分:0)
轮廓/冲浪命令通常使用两个矢量(X和Y)和一个矩阵(Z)。因此,对于两个向量(X(i),Y(i))的每个元素,矩阵中应该有一个值(Z(i,j))。因此,矩阵Z的大小应该等于第一矢量(X)的大小乘以第二矢量(Y)的大小。 根据matlab:surf(Z)从矩阵Z中的z分量创建一个三维阴影表面,使用x = 1:n和y = 1:m,其中[m,n] = size(Z)。
你的代码的第一个问题是你在x,y,z中产生复杂的值,你不能用于冲浪。
使用冲浪时出错(第75行)X,Y,Z和C不能复杂
如果您删除/修改数字的虚部,那么您可以执行以下操作:
[X,Y,Z] = meshgrid(x,y,z);
surf(X,Y,Z)
虽然你可以尝试:
plot3(x,y,z)
答案 1 :(得分:0)
除了NKN在他的回答中提到的。
我猜你错过了theta
的正确定义。它只是一个标量,我猜它应该是一个向量。
例如为:
theta = linspace(0,2*pi,100)
然后创建theta
和h
[h,theta]=meshgrid(h,theta)
并计算E_F
。
您可能也需要创建A
和B
的网格。
最后,您获得Z
- 矩阵而不是向量,surf
正常工作。也许你也应该考虑quiver
。