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.
我會很感激任何建設性的建議。
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.
我會很感激任何建設性的建議。
您還可以使用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)
您可以在最新版本的MATLAB的使用arrayfun
功能:
z = [0.4 0.5 0.75]';
y = arrayfun(@(upperLim)(quad(@sin,0,upperLim)),z);
解決該問題。非常感謝! – skip
我想你的方式可能比我的快一點。但是我重新構造了一下,因爲你重複了一些信息(即當你想改變1個限制,你必須改變2個數字,當你想改變功能時,你必須改變3個標識符)。以下代碼與您的代碼相同:'lims = [0.4 0.5 0.75]'; F = @(u)(sin(u。* lims)。* lims); quadv(F,0,1)' – Egon
同意。這是一個更乾淨的方式,並且更好地推廣。我想我試圖太明確。 – MarkV
謝謝兩位有幫助的評論。 – skip