2013-05-28 80 views
0

我有一個巨大的功能整合:爲什麼會出現這些錯誤? quad2d,dblquad

SYMS XY

F =(228155022448185 *(cos((2 * PI)* Y)./ EXP(。 131738205584307./(35184372088832*x))-1)*(cos((8. * pi)。* y)/ exp(131738205584307 ./(8796093022208 * x)) - 1)*(cos((8. * pi )*/exp(1185643850258763 ./(35184372088832. * x)) - 2))/((131738205584307 ./(8796093022208.x))+ cos((18. * pi)。* y)/ exp (18014398509481984. *(x。^ 2))。* exp(x。*((1981232555272083。*(y。^ 2))/ 2251799813685248 - y./16 + 1.16)))

我需要整合它(x:[0,inf)和y:[0,1]),但是我收到quad2d和dblquad的錯誤。

quad2d(quadfun,0,100,0,1) 

??? Error using ==> quad2d>tensor at 350 
Integrand output size does not match the input size. 
Error in ==> quad2d at 164 
[Qsub,esub] = tensor(thetaL,thetaR,phiB,phiT); 
and 

dblquad(quadfun,0,100,0,1)  

    ??? Error using ==> dblquad>innerintegral at 74 
     Inputs must be floats, namely single or double. 
    Error in ==> quad at 76 
    y = f(x, varargin{:}); 

Error in ==> dblquad at 53 
Q = quadf(@innerintegral, ymin, ymax, tol, trace, intfcn, ... 

你能解釋爲什麼會出現這些錯誤嗎?我該如何解決它?

+0

對不起,其實它是寫你提到但不知何故它們正在消失 – frwmetric

回答

4

quad函數族不能使用符號數學。相反,您可以:

  1. 使用與int的符號集成。要計算雙積分,連續兩次調用int,每次使用不同的積分變量。

  2. 定義一個接受非符號參數並將其句柄傳遞給quad的等價規則函數。我會用一個匿名函數來做 - 只需從f = @(x, y)而不是f =開始你的定義,就是這樣(還記得現在f是一個函數句柄,所以你不需要在傳遞時寫出ampersat(@)它周圍)。

+0

首先當我使用int,我收到警告:顯式積分找不到。其次沒有符號變量我怎麼才能定義我的函數...我寫了syms xy然後我寫了我的函數爲f = @(x,y)...其實沒有提及quadfun = @(x,y)f上面對不起這個...... – frwmetric

+0

@frwmetric如果MATLAB找到顯式積分有問題,這意味着你必須採取第二種方法。不要將'x'和'y'符號定義爲符號參數,保留所有符號都不是'quad'。 –

+0

對不起,我不是matlab專家..你是什麼意思非符號?...我如何定義我的函數與非符號變量... – frwmetric