Matlab中圆形波导的绘图模式

时间:2018-03-11 18:00:14

标签: matlab

我在绘制圆形波导的TE和TM模式所需的脚本时遇到了一些麻烦 一切都基于这些公式: enter image description here

现在我专注于TE模式,我必须绘制的是平方网格内的场矢量e_mn'',它等于波导的半径。
为此,我需要计算第一类bessel函数并提取对应于函数等于零的第n个根的x_mn。这些观点应该是真实的但是积极的 我按照这个例子左右 https://www.mathworks.com/examples/matlab/community/22719-roots-of-a-bessel-function 但我收到一个错误:

  

对于类型为>的输入参数,未定义的函数'isfinite' 'function_handle'。
根中的错误(第26行)if~all(isfinite(c))
错误   圆形(第20行)
      x_mn =根(J0)

这是我的代码。你能帮帮我吗?

clc
clear all
close all
a=20; %radius
m=0;    
n=1;


%%
if m==0
    ki_m=1;
else
ki_m=sqrt(2); 
end

r=0:0.1:a;
J0 = @(r) besselj(0,r);
    %J0 = besselj(m,r);
    %plot(J0)
    x_mn=roots(J0)
    %plot(J0(x_mn))
    %x_mn=abs(x_mn);
k_mn=x_mn./a;
F_mn=(ki_m*k_mn)./(J0(x_mn)*sqrt(pi*(x_mn^2-m^2)));

for r=0:1:a
    for phi=0:1*pi/180:2*pi
        e_mnR=-F_mn.*(J0(k_mn*r)/(k_mn.*r))*sin(m*phi);
        e_mnPHI=F_mn.*J0(k_mn*r)*cos(m*phi);
    end
end
e_mnR=abs(e_mnR);
e_mnPHI=abs(e_mnPHI);
X=0:1:a;
[X,Y] = meshgrid(1:1:a);
quiver(X,Y,e_mnR,e_mnPHI);
hold on

2 个答案:

答案 0 :(得分:0)

这不是我的专业领域,所以请稍等,但我做了一些谷歌搜索,并认为我知道发生了什么:

您在提供的link中使用的代码定义:

J0 = chebfun(@(x) besselj(0,x),[0 100]);

请注意,您对Chebfun示例的引用链接已失效,但我读到了here

  

Chebfun是一个用于计算的开源软件包,具有大约15位精度的功能。大多数Chebfun命令都是熟悉的MATLAB命令的重载......

您引用的示例的唯一原因是因为J0是使用Chebfun定义的,它会使matlab命令roots重载自己的版本,该版本适用于函数句柄。如果您想复制该代码示例,可能请阅读更多here并尝试使用此工具。希望这会有所帮助...

答案 1 :(得分:0)

您可以使用fzero而不是根,但是您在绘图部分混淆了极坐标和笛卡尔坐标,并且向量的尺寸不一致