MATLAB 在我的函数上的数值积分给了我很多数字而不是一个数字
numerical integration of MATLAB on my function give me many numbers not a single number
MATLAB 在我的函数上的数值积分给了我很多数字,而不是一个数字。我不擅长 MatLaB,所以我不知道原因。有没有人可以帮助我?
这是我的职责。
function [ y ] = SucP( l,a,P,D,r,th );
d=2./a;
Ehd=integral(@(x)x.^d.*exp(-x),0,inf);
gam=gamma(1-d);
C1=1./(1+th.*(r/D).^a);
C2=1./(1+th.*P.*(r/D).^a);
hypgeo1=hypergeom([1,2],[2-d],th.*(r./D).^a.*C1);
hypgeo2=hypergeom([1,2],[2-d],th.*P.*(r./D).^a.*C2);
y=exp(-l.*pi.*(th).^d.*r.^2.*P.^d.*Ehd.*gam-C1+C2+th./(1-d).*r.^2.*(r./D).^(a-2).*(C1.^2.*hypgeo1-P.^d.*C2.^2.*hypgeo2));
end
我想整合
fun=@(l,a,P,D,r,z)SucP(l,a,P,D,r,2.^z-1);
y=integral(@(z)fun(l,a,P,D,r,z),0,inf);
但是这个整合给了我以下结果。
Columns 1 through 6
0.999869167524854 0.998589370430984 0.994817933624792 0.987704371328770 0.976976845412355 0.962748430805626
Columns 7 through 12
0.945394762911001 0.925627034788835 0.904532141053543 0.883378353636190 0.863363119639727 0.845589211136565 ....
Columns 145 through 150
NaN NaN NaN NaN NaN NaN
ans =
NaN
有没有人可以帮助我?
按照以下方式尝试:
1) 你必须去掉那些 NaN 值。它们出现的原因如下:
您正在尝试整合您的功能
SucP(l,a,P,D,r,2.^z-1)
从 z=0
到 infinity
。但是,从 z
的某个值开始, 2^z-1
将大于 matlab 可以处理的最大数。
要避免这种情况,您需要做的是更改积分的范围,以便 2^z-1
永远不会超过 realmax(这是 MATLAB 可以处理的最大值)。
积分上限为:
Upperbound=log(realmax)/log(2)-4;
2) 您必须将您声明的 fun
函数声明更改为 :
fun=@(z)SucP(l,a,P,D,r,2.^z-1);
然后调用:
Y=integral(fun,0,log(realmax)/log(2)-4);
MATLAB 在我的函数上的数值积分给了我很多数字,而不是一个数字。我不擅长 MatLaB,所以我不知道原因。有没有人可以帮助我?
这是我的职责。
function [ y ] = SucP( l,a,P,D,r,th );
d=2./a;
Ehd=integral(@(x)x.^d.*exp(-x),0,inf);
gam=gamma(1-d);
C1=1./(1+th.*(r/D).^a);
C2=1./(1+th.*P.*(r/D).^a);
hypgeo1=hypergeom([1,2],[2-d],th.*(r./D).^a.*C1);
hypgeo2=hypergeom([1,2],[2-d],th.*P.*(r./D).^a.*C2);
y=exp(-l.*pi.*(th).^d.*r.^2.*P.^d.*Ehd.*gam-C1+C2+th./(1-d).*r.^2.*(r./D).^(a-2).*(C1.^2.*hypgeo1-P.^d.*C2.^2.*hypgeo2));
end
我想整合
fun=@(l,a,P,D,r,z)SucP(l,a,P,D,r,2.^z-1);
y=integral(@(z)fun(l,a,P,D,r,z),0,inf);
但是这个整合给了我以下结果。
Columns 1 through 6
0.999869167524854 0.998589370430984 0.994817933624792 0.987704371328770 0.976976845412355 0.962748430805626
Columns 7 through 12
0.945394762911001 0.925627034788835 0.904532141053543 0.883378353636190 0.863363119639727 0.845589211136565 ....
Columns 145 through 150
NaN NaN NaN NaN NaN NaN
ans =
NaN
有没有人可以帮助我?
按照以下方式尝试:
1) 你必须去掉那些 NaN 值。它们出现的原因如下:
您正在尝试整合您的功能
SucP(l,a,P,D,r,2.^z-1)
从 z=0
到 infinity
。但是,从 z
的某个值开始, 2^z-1
将大于 matlab 可以处理的最大数。
要避免这种情况,您需要做的是更改积分的范围,以便 2^z-1
永远不会超过 realmax(这是 MATLAB 可以处理的最大值)。
积分上限为:
Upperbound=log(realmax)/log(2)-4;
2) 您必须将您声明的 fun
函数声明更改为 :
fun=@(z)SucP(l,a,P,D,r,2.^z-1);
然后调用:
Y=integral(fun,0,log(realmax)/log(2)-4);