MATLAB积分如上图所示 J为第一类bessel函数,除u外各系数均已知 用INT 积分为什么会出不来结果 最好能附上
来源:学生作业帮 编辑:搜搜做题作业网作业帮 分类:综合作业 时间:2024/07/31 17:37:25
MATLAB积分
![](http://img.wesiedu.com/upload/7/85/785797cc1361a820fec2c9b8fe006e87.jpg)
如上图所示 J为第一类bessel函数,除u外各系数均已知 用INT 积分为什么会出不来结果
最好能附上程序
![](http://img.wesiedu.com/upload/7/85/785797cc1361a820fec2c9b8fe006e87.jpg)
如上图所示 J为第一类bessel函数,除u外各系数均已知 用INT 积分为什么会出不来结果
最好能附上程序
![MATLAB积分如上图所示 J为第一类bessel函数,除u外各系数均已知 用INT 积分为什么会出不来结果 最好能附上](/uploads/image/z/14935059-27-9.jpg?t=MATLAB%E7%A7%AF%E5%88%86%E5%A6%82%E4%B8%8A%E5%9B%BE%E6%89%80%E7%A4%BA+J%E4%B8%BA%E7%AC%AC%E4%B8%80%E7%B1%BBbessel%E5%87%BD%E6%95%B0%2C%E9%99%A4u%E5%A4%96%E5%90%84%E7%B3%BB%E6%95%B0%E5%9D%87%E5%B7%B2%E7%9F%A5+%E7%94%A8INT+%E7%A7%AF%E5%88%86%E4%B8%BA%E4%BB%80%E4%B9%88%E4%BC%9A%E5%87%BA%E4%B8%8D%E6%9D%A5%E7%BB%93%E6%9E%9C+%E6%9C%80%E5%A5%BD%E8%83%BD%E9%99%84%E4%B8%8A)
说明 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')![](http://img.wesiedu.com/upload/2/5d/25d95be88464c88cf35420395388a025.jpg)
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')
![](http://img.wesiedu.com/upload/2/5d/25d95be88464c88cf35420395388a025.jpg)