积分内的指数积分

时间:2016-06-08 23:55:36

标签: matlab numerical-integration

我试图在数字上整合几个不同的表达式,但它们都有一个指数积分,被另一个积分包围,即

integral image

我似乎无法使用以下代码解决此问题:

syms s p t
W = 3.18*10^(-22);
b = 10^(-23);
X = 300;
L = 0.374;
intlim = 0.589;

myfuncirc = @(s,p,t) (-W).*sqrt((L.^2)-(s.^2)).*(((-p.*cos(t))+sqrt(1-((p.^2).*((sin(t)).^2)))-sqrt(L.^2-s.^2)).^(-2));

s_min = 0;
s_max = L;
t_min = 0;
t_max = pi;

integral(@(p)(p.*exp(-(integral2(@(s,t) myfuncirc(s,t,p),s_min,s_max,t_min,t_max))/(b.*X))),0,intlim,'Arrayvalued',true)

我收到如下所示的错误消息,但我期待0到1之间的数字:

  

警告:遇到无限或非数字值。   在funfun \ private \ integralCalc> iterateArrayValued at 267   在funfun \ private \ integralCalc> vadapt at 130   在funfun \ private \ integralCalc at 75   积分在88

我也尝试使用以下形式进行类似的整合,但也没有获得预期的答案:

second integral image

pmax = y;
pmin = 0;
ymax = 1;
ymin = @(x) x;
xmax = 1;
xmin = 0;

integral3(@(x,y,p) (exp(-(integral(@(s)myfun(s,p),0,lam,'ArrayValued',true)./(k.*T)))),xmin,xmax,ymin,ymax,pmin,pmax,'Method','iterated')
  

警告:遇到无限或非数字值。 >在funfun \ private \ integralCalc> iterateScalarValued at 349 in funfun \ private \ integralCalc> vadapt at 132 in funfun \ private \ integralCalc at 75 in funfun \ private \ integral2Calc> @(xi,y1i,y2i)integralCalc(@(y)fun (xi ones(size(y)),y),y1i,y2i,opstruct.integralOptions)at 17 funfun \ private \ integral2Calc> @(x)arrayfun(@(xi,y1i,y2i)integralCalc(@ (y)fun(xi ones(size(y)),y),y1i,y2i,opstruct.integralOptions),x,ymin(x),y​​max(x))at 17 in funfun \ private \ integralCalc&gt ; iterateScalarValued at 314 in funfun \ private \ integralCalc> vadapt at 132 in funfun \ private \ integralCalc at 75 in funfun \ private \ integral2Calc> integral2i at 20 in funfun \ private \ integral2Calc at 7 in integral3> innerintegral at 137 in funfun \ private \ integralCalc> iterateScalarValued at 314 in funfun \ private \ integralCalc> vadapt at 132 in funfun \ private \ integralCalc at 75 in integral3 at 121警告:集成失败。 >在积分3中125

1 个答案:

答案 0 :(得分:1)

问题1是你定义

myfuncirc = @(s,p,t) ...

但是当它被调用时,它被称为

myfuncirc(s,t,p)

参数的顺序不一样。您应该将myfuncirc的定义更改为

myfuncirc = @(s, t, p) ...

很难说出第二个,因为你发布的内容并没有给你打印的结果,它有错误 - 几个值是未定义的,比如myfun和k。但是,我认为问题是pmax没有被定义为函数句柄,而是作为一个值 - 在pmax被赋值时的y值。我怀疑你想要

pmax = @(x,y) y;