在 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')
我正在尝试使用函数 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')