문제

I am trying to solve a double integral where I am solving both inner as well as outer integral with quadgk function.

% The integrand is of course a function of both x and y
integrand = @(x,y) (phi(j,y,X) - phi(j,x,X))*(phi(i,y,X) - phi(i,x,X))/abs(y-x)^(2*s+1)

% The inner integral is a function of x, and integrates over y
inner = @(x) quadgk(@(y)integrand(x,y), x-lambda, x+lambda)

% The inner integral is integrated over x to yield the value of the double integral 
dblIntegral = quadgk(inner, -(1+lambda), 1+lambda)

and I am getting this following error:

integrand = @(x,y)(phi(j,y,X)-phi(j,x,X))*(phi(i,y,X)-phi(i,x,X))/abs(y-x)^(2*s+1)
inner = @(x)quadgk(@(y)integrand(x,y),x-lambda,x+lambda)

??? Error using ==> quadgk at 108
A and B must be scalar floats.

Error in ==> @(x)quadgk(@(y)integrand(x,y),x-lambda,x+lambda)
Error in ==> quadgk>evalFun at 344
        fx = FUN(x);

Error in ==> quadgk>f1 at 362
    [y,too_close] = evalFun(tt);

Error in ==> quadgk>vadapt at 258
        [fx,too_close] = f(x);

Error in ==> quadgk at 197
[q,errbnd] = vadapt(@f1,interval);

Error in ==> frational_laplacian at 29
dblIntegral = quadgk(inner, -(1+lambda), 1+lambda)
도움이 되었습니까?

해결책

You're getting that problem because internally quadgk evaluates the passed function using a vector of values. This means that in the line

dblIntegral = quadgk(inner, -(1+lambda), 1+lambda)

the function inner is being called with x being a vector. quadgk requires that a and b (in this case x±lambda) be scalars, so you get the error you've been seeing. If you want to ensure that inner always gets a scalar as input, you can use

dblIntegral = quadgk(@(x)arrayfun(inner,x), -(1+lambda), 1+lambda)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top