1、首先,如果要對quad函數傳遞附加參數(Extra Parameters),應該先搞清楚quad函數的調用格式:
1
|
q = quad(fun,a,b,tol, trace ) |
其中,第4、5個參數分別是tol和trace,不能想當然。你如果要傳遞附加參數,應該從第6個參數開始——儘管文檔中並沒有提及,但quad函數的確可以接受附加參數。類似地函數還有很多,例如fsolve、fmincon等函數的函數。
在傳遞附加參數時,需要把前面的參數補齊,即使你不知道也不關心那些參數到底是幹什麼用的。幸運的是,這類函數絕大多數(如果不是所有的話)都支持用空數組作爲佔位符,例如:
q = quad(fun,a,b,[],[],r) |
這樣,你也就可以不用管tol、trace到底該怎樣取值了。
2、其次,quad函數並不支持一次性對多個附加參數求解。解決的辦法一是用循環,另一是用arrayfun函數(其實後者本質上也是循環,只不過寫法上簡單些)。
f=@(t,r) (142884+1.21*r.*r-831.6*r.*cos(2*t)).^(1/2);
r=0:0.1:75;
q=arrayfun(@(R)quad(f,0,90,[],[],R),r);
plot(r,q)
|
順便提醒一句,求積分的計算量不小,r的間距沒必要取那麼小(取5得到的結果就挺平滑)。