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