MATLAB积分如上图所示 J为第一类bessel函数,除u外各系数均已知 用INT 积分为什么会出不来结果 最好能附上
来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/11/18 12:05:50
MATLAB积分
如上图所示 J为第一类bessel函数,除u外各系数均已知 用INT 积分为什么会出不来结果
最好能附上程序
如上图所示 J为第一类bessel函数,除u外各系数均已知 用INT 积分为什么会出不来结果
最好能附上程序
说明 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')
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')