3

I need to plot this function enter image description here

theta = (-pi:0.01:pi);
f = 3*10^9;
c = 299792458;
da = 2;

Here's my code, but I'm not sure it's correct. I dont know where exactly dot mark should be. How to set X-Axis in degress?

beta = (2*pi*f)/c;
const= (da*beta)/2; 
j= (cos(theta)+1).*(besselj(1,const*sin(theta))./(const*sin(theta)));

My another question is how to plot this function in polar coordinates.

I made something like this.

polar(theta,j);

Is it possible to rotate that function(by y-axis) to get 3D plot?

4

1 回答 1

2

事情对我来说是完全正确的,尽管我不会将符号j用作变量,因为(就像i那样)它是虚数单位 ( sqrt(-1)) 的符号。这样做你会覆盖它,因此在你不需要复数之前一切都会正常工作。

当您打算逐个元素地组合数组条目时,您应该使用诸如 ( .*) 之类的元素操作,就像您正确地获取F(\theta). 实际上,cos(theta)是包含的角度的余弦数组theta等。

Rotate 3D最后,您可以使用绘图窗口中的命令旋转绘图。尽管如此,您有一条 2D 曲线 ( F(\theta)),因此,您将继续旋转 2D 图形以获得某种透视图,仅此而已。要获得真实信息,您需要一个额外的因变量(或者我误解了您的问题?)。在此处输入图像描述

编辑:现在我明白了你的观点,你想要围绕某个轴的旋转表面,我认为由于其中的对称性是theta=0. 好吧,旋转曲面可以通过一些解析几何获得并绘制,例如使用mesh. 看一下这个:

  % // 2D polar coordinate radius (your j)
  Rad= (cos(theta)+1).*(besselj(1,const*sin(theta))./(const*sin(theta)));
  Rad = abs(Rad);  % // We need its absolute value for sake of clarity


  xv = Rad .* cos(theta);  % // 2D Cartesian coordinates
  yv = Rad .* sin(theta);  % // 2D Cartesian coordinates

  phi = -pi:.01:pi;        % // 3D revolution angle around theta = 0

  % // 3D points of the surface
  xf = repmat(xv',size(phi)); 
  yf = yv' * cos(phi);
  zf = yv' * sin(phi);

  mesh(xf,yf,zf)

在此处输入图像描述

您还可以添加图形效果

在此处输入图像描述

这是通过

mesh(xf,yf,zf,'FaceColor','interp','FaceLighting','phong')
camlight right

和更精细的角度离散化(1e-3)

于 2013-01-05T15:27:01.460 回答