首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复合辛普森规则的MatLab算法

复合辛普森规则的MatLab算法
EN

Stack Overflow用户
提问于 2012-10-30 05:15:25
回答 4查看 51.7K关注 0票数 0

我尝试过,只是为了好玩,为复合辛普森法则写了一个MatLab代码。据我所知,代码是正确的,但我的答案并不像我希望的那样准确。如果我在函数f= cos(x) + e^(x^2)上尝试我的代码,其中a= 0,b=1,n= 7,我的答案大约是1,9,而它应该是2,3。如果我使用Wikipedia上提供的算法,我会得到一个非常接近n=7的近似值,所以我的代码显然不够好。如果有人能看到我代码中的任何错误,我将不胜感激!

代码语言:javascript
复制
function x = compsimp(a,b,n,f)
% The function implements the composite Simpson's rule

h = (b-a)/n;
x = zeros(1,n+1);
x(1) = a;
x(n+1) = b;
p = 0;
q = 0;

% Define the x-vector
for i = 2:n
    x(i) = a + (i-1)*h;
end

% Define the terms to be multiplied by 4
for i = 2:((n+1)/2)
    p = p + (f(x(2*i -2)));
end

% Define the terms to be multiplied by 2
for i = 2:((n-1)/2)
    q = q + (f(x(2*i -1)));
end

% Calculate final output
x = (h/3)*(f(a) + 2*q + 4*p + f(b));
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-10-30 05:24:03

您的间隔间隔应拆分为多个n [a,b]。这将导致形成每个分区边界的xn+1值。向量x只包含n元素。看起来您的代码只处理n术语,而不是所需的n+1

EDIT::现在你已经根据上面的内容修改了问题,试试这个

代码语言:javascript
复制
% The 2 factor terms
for i = 2:(((n+1)/2) - 1 )
    q = q + (f(x(2*i)));
end

% The 4 factor terms
for i = 2:((n+1)/2)
   p = p + (f(x(2*i -1)));
end
票数 1
EN

Stack Overflow用户

发布于 2015-04-29 02:55:09

您创建的代码运行得很好。我看到的唯一问题是n。根据我的经验,任何函数都可以尝试使用n>=10000。

票数 0
EN

Stack Overflow用户

发布于 2015-11-15 05:02:09

代码语言:javascript
复制
function x = compsimp(a,b,n,f)

我不知道这是否重要,但不应该在第一个字母中使用f

代码语言:javascript
复制
function x = compsimp(f,a,b,n)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13129805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档