在matlab上绘制3D绘图

时间:2013-12-27 07:54:56

标签: matlab 3d plot

我想绘制一个悬挂在地面可变高度“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.

2 个答案:

答案 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)

然后创建thetah

的网格
[h,theta]=meshgrid(h,theta)

并计算E_F

您可能也需要创建AB的网格。

最后,您获得Z - 矩阵而不是向量,surf正常工作。也许你也应该考虑quiver