Matlab中Bessel函数微分的计算

时间:2014-08-06 11:09:25

标签: 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.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

2 个答案:

答案 0 :(得分:1)

diff在数字向量上应用 只计算连续值之间的差异。差异的数量比值的数量少一个。当然,您可以使用这些差异来数值逼近函数的导数。

如果您想直接计算衍生,可以使用符号计算(请参阅Matlab Symbolic Toolbox)。在符号函数上应用时,diff does give you the derivative

>> syms x; %// define symbolic variable
>> f = besselj(1,x); %// define symbolic function
>> g = diff(f ,x) %// compute derivative
g =
besselj(0, x) - besselj(1, x)/x

然后,您可以使用subs评估特定值的衍生物:

>> subs(g, 1:8)
ans =
    0.3251   -0.0645   -0.3731   -0.3806   -0.1121    0.1968    0.3007    0.1423 

答案 1 :(得分:0)

要以数字方式区分函数,您应该使用较小的步骤和gradient函数:

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)