Matlab:如何计算函数在多个极限上的定积分?

发布于 2024-12-10 14:39:39 字数 316 浏览 1 评论 0原文

假设:

z = [0.4 0.5 0.75]'  
function y = myfunct(x)  
y = quad(@sin, 0, x)

我想计算 sin(x) 从 0 到 0.4、0.5 和 0.75 的定积分,使用:

myfunct(z)

但是,Matlab 返回:

??? Error using ==> quad at 70  
The limits of integration must be scalars.  

Assume:

z = [0.4 0.5 0.75]'  
function y = myfunct(x)  
y = quad(@sin, 0, x)

I'd like to calculate the definite integral of sin(x) from 0 to 0.4, to 0.5, and 0.75, using:

myfunct(z)

However, Matlab returns:

??? Error using ==> quad at 70  
The limits of integration must be scalars.  

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

混浊又暗下来 2024-12-17 14:39:39

您可以在最新版本的 MATLAB 中使用 arrayfun 函数:

z = [0.4 0.5 0.75]';
y = arrayfun(@(upperLim)(quad(@sin,0,upperLim)),z);

You can use the arrayfun function in recent versions of MATLAB:

z = [0.4 0.5 0.75]';
y = arrayfun(@(upperLim)(quad(@sin,0,upperLim)),z);
相守太难 2024-12-17 14:39:39

您还可以使用quadv 来执行此操作。但是,不要制作积分极限向量,而是制作一个数组值函数,这样当您对每个元素进行积分时,积分范围将为 0 到 1。

更具体地说,您希望对 x = 中的 sin(x) 进行积分0 到 z。这与从 u = 0 到 1 积分 sin(uz)*z 相同(u 替换)。创建一个数组函数

F = @(u) [sin( .4 * u) * .4, sin( .5 * u ) * .5, sin( .75 * u ) * .75 ];

然后执行

quadv(F,0,1)

You can also use quadv to do this. BUT, instead of making a vector of integration limits, make an array valued function so that when you integrate each element, the range of integration will be 0 to 1.

To be more specific, you want to integrate sin(x) from x = 0 to z. This is the same as integrating sin(u z)*z from u = 0 to 1 (u-substitution). Make an array function

F = @(u) [sin( .4 * u) * .4, sin( .5 * u ) * .5, sin( .75 * u ) * .75 ];

Then do

quadv(F,0,1)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文