在 MATLAB 中生成积分数组作为积分限制的函数

Produce integration array as a function of integration limit in MATLAB

我正在尝试使用函数 integral 来 return 积分点数组

我定义了一个函数:

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) 会导致错误。有什么建议吗?

注意: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')