贝塞尔积分实现

Bessel's integral implementation

我正在尝试实现第一种 n 阶贝塞尔函数的 integral representation

这是我尝试过的:

t = -pi:0.1:pi;
n = 1;
x = 0:5:20;
A(t) = exp(sqrt(-1)*(n*t-x*sin(t)));
B(t) = integral(A(t),-pi,pi);
plot(A(t),x)

我想得到的情节如维基百科页面所示。​​

它说:

Error using * Inner matrix dimensions must agree.

Error in besselfn (line 8) A(t) = exp(sqrt(-1)*(n*t-x*sin(t)));

所以我试着把 x-5;

输出为:

Subscript indices must either be real positive integers or logicals.

Error in besselfn (line 8) A(t) = exp(sqrt(-1)*(n*t-x*sin(t)));

如何让这个正确?我错过了什么?

要在 MATLAB 中显示匿名函数,您可以使用 (NOT A(t)=...)

A = @(t) exp(sqrt(-1)*(n*t-x.*sin(t)));

逐个元素操作(这里我使用了.*)。

附加评论:

  1. 您可以使用 1i 而不是 sqrt(-1)

  2. B(t)不能作为t参数的函数,因为t是积分的内部变量。

  3. plot(A(t),x)中有两个自变量。因此,只要 tx 具有相同的大小,您就可以显示绘图。可能你的意思是这样 plot(x,A(x)) 来显示函数 A(x)plot(A(x),x) 来显示 A(x).

  4. 的反函数

最后你的代码可以是这样的:

n = 1;
x = 0:.1:20;
A = @(x,t) exp(sqrt(-1)*(n*t-x.*sin(t)));
B = @(x) integral(@(t) A(x,t),-pi,pi);
for n_x=1:length(x)
    B_x(n_x) = B(x(n_x)); 
end
plot(x,real(B_x))