![](/img/trans.png)
[英]Converting a MATLAB quadgk integration to Scipy quad with a long function to integrate (any alternative to passing a lambda function?)
[英]How to use quadgk function in matlab as a function handle?
我正在嘗試求解一個雙重積分,其中我要通過Quadgk函數求解內部和外部積分。
% 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)
我收到以下錯誤:
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)
之所以會遇到這個問題,是因為在內部quadgk
使用值向量評估傳遞的函數。 這意味着
dblIntegral = quadgk(inner, -(1+lambda), 1+lambda)
函數inner
以x為向量被調用。 quadgk
要求a和b(在本例中為x±lambda)為標量,因此您會看到錯誤。 如果要確保inner
始終獲得標量作為輸入,則可以使用
dblIntegral = quadgk(@(x)arrayfun(inner,x), -(1+lambda), 1+lambda)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.