2011-10-16 68 views
2

假設:Matlab:如何計算一個函數在多個極限上的定積分?

z = [0.4 0.5 0.75]' 
function y = myfunct(x) 
y = quad(@sin, 0, x) 

我想計算罪的定積分(x)的從0到0.4,到0.5,和0.75,使用:

myfunct(z) 

然而,Matlab的返回:

??? Error using ==> quad at 70 
The limits of integration must be scalars. 

我會很感激任何建設性的建議。

回答

1

您還可以使用quadv做到這一點。但是,不是創建一個積分限制向量,而是創建一個數組賦值函數,以便在對每個元素進行積分時,積分範圍將爲0到1.

更具體地說,要整合sin(x )從x = 0到z。這與從u = 0到1(u-替換)積分sin(u z)* z相同。製造陣列功能

F = @(u) [sin(.4 * u) * .4, sin(.5 * u) * .5, sin(.75 * u) * .75 ]; 

然後做

quadv(F,0,1) 
+1

我想你的方式可能比我的快一點。但是我重新構造了一下,因爲你重複了一些信息(即當你想改變1個限制,你必須改變2個數字,當你想改變功能時,你必須改變3個標識符)。以下代碼與您的代碼相同:'lims = [0.4 0.5 0.75]'; F = @(u)(sin(u。* lims)。* lims); quadv(F,0,1)' – Egon

+0

同意。這是一個更乾淨的方式,並且更好地推廣。我想我試圖太明確。 – MarkV

+0

謝謝兩位有幫助的評論。 – skip

2

您可以在最新版本的MATLAB的使用arrayfun功能:

z = [0.4 0.5 0.75]'; 
y = arrayfun(@(upperLim)(quad(@sin,0,upperLim)),z); 
+0

解決該問題。非常感謝! – skip