필터 지우기
필터 지우기

Nesting multidimensional integrals when the integrand has if-else statements

조회 수: 2 (최근 30일)
Adamya Goyal
Adamya Goyal 2021년 8월 29일
편집: Adamya Goyal 2021년 8월 29일
Hi, I am trying to do a multidimensional nested integral of a function that has if-else conditions in it. I know how to do nesting of integrals but I don't understand why I am getting the following error. Please see the code below. My issue is that Matlab throws a "Could not complete in 10000 steps" error even if the integrand is simple and regular. Is there a way to avoid this? Thanks.
func1 = @(k,p,v)integrdef(k,p,v);
func2 = @(p)integral2(@(k,v)arrayfun(@(k,v)func1(k,p,v),k,v),0,5,0,3);
%Ignore this line %func3 = integral(func2,0,7,'ArrayValued',true) %Ignore this line
func2(2)
function integrout=integrdef(a,b,c)
if (a>2) && (b>1)
integr = a.*b.*c;
else
integr = 0;
end
integrout = integr;
end
The output is as follows:
>> UpSEplusVert_pureintra_calc1
Warning: Reached the maximum number of function
evaluations (10000). The result fails the
global error test.
> In integral2Calc>integral2t (line 129)
In integral2Calc (line 9)
In integral2 (line 106)
In UpSEplusVert_pureintra_calc1>@(p)integral2(@(k,v)arrayfun(@(k,v)func1(k,p,v),k,v),0,5,0,3)
In UpSEplusVert_pureintra_calc1 (line 15)
ans =
9.4496e+01
It gives nearly the correct answer but I'd like high precision i.e. low global error. The exact answer is 94.5 but I get 94.496 instead. My actual goal is to do a 4-D integral using "integral3" and "integral" nesting, but for simplicity I have created a model example above which is only 3-D and solved it using a nesting of "integral2" and "integral" for illustration. Thanks.

답변 (0개)

카테고리

Help CenterFile Exchange에서 Numerical Integration and Differential Equations에 대해 자세히 알아보기

제품


릴리스

R2018a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by