作业帮 > 数学 > 作业

matlab画积分曲线问题

来源:学生作业帮 编辑:作业帮 分类:数学作业 时间:2024/11/08 23:48:19
matlab画积分曲线问题
clear
figure;
% b=-6;
% s=3.5;
% u=-17;
u=10^(-17/10); %参数u,b,s不确定是上面一组还是这一组
b=10^(-6/10);
s=10^(3.5/10);
x=0:0.01:30; %x也不一定要到30
b0=b.^2;
d0=s.^2;
f0=@(z,x)(1./z).*exp(-((log(z) - u).^2./(2*d0))-(((x.^2)+(z.^2))./ (2*b0))).* besseli(0,x.*z./b0);
f1=arrayfun(@(x)integral(@(z)f0(z,x),0,inf),x);
f=(f1.*x)./(b0.*sqrt(2*pi*d0));
plot(x,f,'r');
大概是因为贝塞尔或者指数函数的关系,不过还是出不来 ,
问题出在Bessel函数上,具体我再分析一下.
请追问.
再问: 你好 参数修改一下
s=3.5;
u=-17;
b=0.2512;
再答: bessel函数的参数和以前不同,是不是搞错吧?
x取任何正数,x*z/b0都是z的增函数,而z的积分上限是无穷大,所以bessel函数必然会出现无穷大,再乘以指数项的0就会得到nan。
出差途中,用手机打字,简单说这些吧。
再问: 式子是对的
后来在别人帮助下用了加法 勉强出来了
还是非常感谢你
再答: 不知道你说的加法是什么概念。即使能算出来结果,也不一定是对的。

我坚持之前的观点,即:b0肯定是正数,x的取值范围也是正数,那么besseli函数的参数x.*z./b0随z增大,既然对z的积分区间是0到无穷大,那么肯定就会出现besseli为无穷大的问题,从而导致数值积分失败。

不过,对x取不同值,绘制f0对z的曲线,可以看到z稍大时,f0的值非常接近0。根据这一点,可以取把z的积分上限设为有限值,但这个有限值应该设成多大、根据是什么,都还需要研究。