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')