在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
答案 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)