计算matlab中复合simpson规则的步数

时间:2016-04-29 11:11:48

标签: matlab

我想在matlab中计算复合simpson规则的步长数。这是我的代码

% Estimate the number of steps n required for the three point composite Simpson’s rule,
% function's integral from 0 to 1 and the function is ∫ 4/(1+x.^2)=pi within an error bound of 10−6
h=0.01;
n=1000;
x=pi;
a=0;
b=1;
x=zeros(1,n);
f=@(x)4./(1+x.^2);
nn=(b-a)/h;
xexact=integral(f,a,b);
p=0;
q=0;

for i=1:n
x(i)=a+(i-1)*h;
end

for i=1:n-1
    p=p+2*(f(x(i)))+4*(f(x(i)+h/2));
end

nn=((b-a)*(f(a)+f(a+h/2)+p+f(b)))./(6*x)

当我运行代码时,我得到一个1 * 1000个元素的向量,但我想得到nn=(b-a)/h的步数。我做错了什么?

由于

2 个答案:

答案 0 :(得分:0)

nn=((b-a)*(f(a)+f(a+h/2)+p+f(b)))./(6*x)

在这段代码中,您需要'x',但'x'是1x1000向量,因此您的nn是1x1000向量。

答案 1 :(得分:0)

伊戈尔的回答似乎不正确。 在您的代码中x1x1000 doublenn中的所有其他值均为1x1加倍。 当你使用师时,你得到了:

1x1 double ./ 1x1000 double

所以它返回1x1000 doubles

P.S。首先,检查你的循环 - 它计算999次,但p不是一个阵列。它只包含此循环中的最后一个值! 其次,您不能以这种方式使用x数组获得单个值。