贝塞尔函数微分的matlab计算

贝塞尔函数微分的matlab计算,matlab,differentiation,bessel-functions,Matlab,Differentiation,Bessel Functions,在Matlab中,为什么贝塞尔函数j1(x)的微分(假设x=1:10)给出9个值而不是10个值 x=1:10 J = besselj(1,x) d_J = diff(J) x = 1 2 3 4 5 6 7 8 9 10 J = Columns 1 through 7 0.4401 0.5767 0.3391 -0.0660 -0.3276 -0.2767 -0

在Matlab中,为什么贝塞尔函数j1(x)的微分(假设x=1:10)给出9个值而不是10个值

x=1:10

J = besselj(1,x)

d_J = diff(J)

x =

     1     2     3     4     5     6     7     8     9    10


J =

  Columns 1 through 7

    0.4401    0.5767    0.3391   -0.0660   -0.3276   -0.2767   -0.0047

  Columns 8 through 10

    0.2346    0.2453    0.0435


d_J =

  Columns 1 through 7

    0.1367   -0.2377   -0.4051   -0.2615    0.0509    0.2720    0.2393

  Columns 8 through 9

    0.0107   -0.2018
应用于数值向量仅计算连续值之间的差异。差异的数量比值的数量少一个。当然,您可以使用这些差异来数值近似函数的导数

如果要直接计算导数,可以使用符号计算(请参阅)。应用于符号函数时,
diff

然后,可以使用以下方法计算特定值处的导数:


要在数值上区分函数,应使用较小的步长和
梯度
函数:

x = 1:0.01:10;
J = besselj(1,x);
dJ = gradient(J,x);  % or: dJ = gradient(J)./gradient(x);
plot(x,J,x,dJ)
第二个数值导数可以用

dJ2 = 4*del2(J,x);  % or: dJ2 = 4*del2(J)./gradient(x).^2;
plot(x,J,x,dJ,x,dJ2)

因为
diff
只计算连续值之间的差异,所以是否继续读取文档。差异的数量比值的数量少一个。当然,您可以使用这些差异来近似函数的导数,这可能是您想要的。请注意正确的格式。
x = 1:0.01:10;
J = besselj(1,x);
dJ = gradient(J,x);  % or: dJ = gradient(J)./gradient(x);
plot(x,J,x,dJ)
dJ2 = 4*del2(J,x);  % or: dJ2 = 4*del2(J)./gradient(x).^2;
plot(x,J,x,dJ,x,dJ2)