MATLAB积分如上图所示 J为第一类bessel函数,除u外各系数均已知 用INT 积分为什么会出不来结果 最好能附上
1个回答

说明 1、题目的条件在这里说的不清楚,楼主提问之后发私信向我求助,很多信息都是在私信交流的.为便于其他人阅读,我把主要条件说明如下:(1)表达式中的Ωu=2.145e-3*tan(θ),楼主希望的是求gb与θ之间的关系.(2)有关系数如代码中所示,不再赘述.(3)J0和J1分别表示0阶和1阶第一类bessel函数. 2、θ的取值为0~50,我是按照角度(而不是弧度)理解的.

3、式中的积分表达式用常用的函数如quad、quadl都会遇到问题,因为这些函数的迭代执行次数是固定写在程序中的(10000次),无法修改,导致计算精度不够.而quadgk提供了更多选项,能够满足这里的要求. 下面是几种函数的计算结果对比(θ取50度):>> quad( @(u) besselj(0,u).^2*besselj(0,oumu).*u,0,k01*a)

Warning: Maximum function count exceeded; singularity likely.

> In quad at 106

ans =

2439.5

>> quadl( @(u) besselj(0,u).^2*besselj(0,oumu).*u,0,k01*a)

Warning: Maximum function count exceeded; singularity likely.

> In quadl at 104

ans =

3473.4

>> quadgk( @(u) besselj(0,u).^2*besselj(0,oumu).*u,0,k01*a,'MaxIntervalCount',1e5)

ans =

3387.5

>> syms u

>> I=int(besselj(0,u)^2*besselj(0,oumu)*u,0,k01*a);

>> vpa(I)

ans =

3387.4806929786229142471940788763最后一种方法是使用符号数学工具箱的int、vpa函数计算,精度最高,但耗时较长.可以看到,quadgk在设置足够的迭代次数后能够提供高精度的结果,而quad和quadl误差较大,而且会导致警告信息. 参考代码a = 2.625e-3;

b01 = 0.5;

k01 = 4.054e6;

T = 0 : 5 : 50;

G = zeros(size(T));

for i = 1:length(T)

theta = T(i) *pi/180;

oumu = 2.145e-3*tan(theta);

I = quadgk( @(u) besselj(0,u).^2*besselj(0,oumu).*u,0,k01*a,'MaxIntervalCount',1e5);

gb = 2*b01 * I / ( (k01*a)^2 * bessel(1,k01*a)^2 );

G(i) = gb;

end

plot(T,G)

xlabel('theta')

ylabel('g_b')