2011-10-16 35 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