2016-02-09 41 views
1

我试图使用功能integral返回的集成点农产品集成阵列的集成限制在MATLAB

我已经定义了一个函数的数组的函数:

v = @(t) cos(t); 

和我倒要找到集成功能,x(t)存储在tvec几个这样的价值观:

tvec = linspace(0,10,1000);  
x = @(tf) integral(@(t) v(t),0,tf,'ArrayValued',true); 

但它不会出现MATLAB允许数组值的位成为集成的限制,因为x(tvec)导致错误。有什么建议么?

回答

2

注意:有a duplicate question比这个更有效的解决方案。

问题是integral只接受标量限制。在你的例子中,被积函数是标量值的,所以你应该省略'ArrayValued'设置:这将允许MATLAB矢量化每个上界的积分。

您可以使用arrayfun将每个上限填充到integrate。此外,你可以通过v,功能句柄integral,无需在本地重新定义一个匿名函数吧:

v = @(t) cos(t); 
x = @(tf) arrayfun(@(tmax) integral(v,0,tmax),tf); 

tvec = linspace(0,10,1000);  
sinvec = x(tvec); 

看来工作:

figure; 
plot(tvec,sin(tvec),'s-',tvec,sinvec,'o-'); 
legend('sin(tvec)','sinvec') 

result

+2

[我方式更快](http://stackoverflow.com/a/26557516/3121310)。 ;) – TroyHaskin

+0

@Troy毫无疑问:D认为我们应该投票赞成欺骗?要么,要么在这里添加一个类似的答案。 –

+0

当我看到你的答案时,我正在考虑这个问题。问题是不同的,但期望的结果是相同的......这是一个骗局还是在这两个问题中都有优点(即,我认为这个问题比我所链接的问题更好)? – TroyHaskin