【发布时间】:2019-02-15 23:15:08
【问题描述】:
我在绘制圆形波导的 TE 和 TM 模式时遇到了一些问题。
一切都基于这些公式:
现在我专注于 TE 模式,而我必须绘制的是等于波导半径的平方网格内的场矢量 e_mn''。
为此,我需要计算第一类贝塞尔函数并提取对应于函数等于零的第 n 个根的 x_mn。这些观点应该是真实的但积极的。
我按照这个例子
https://www.mathworks.com/examples/matlab/community/22719-roots-of-a-bessel-function
但我收到一个错误:
未定义函数 'isfinite' 用于类型> 'function_handle' 的输入参数。
如果 ~all(isfinite(c))
在根中出错(第 26 行)
错误 在循环中(第 20 行)
x_mn=roots(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
【问题讨论】:
-
此错误是因为 J0 包含 besselj 函数句柄而不是其结果。如果你想让 besselj 计算 r 只需使用 J0 = besselj(0,r);
标签: matlab