我想在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
的步数。我做错了什么?
由于
答案 0 :(得分:0)
nn=((b-a)*(f(a)+f(a+h/2)+p+f(b)))./(6*x)
在这段代码中,您需要'x',但'x'是1x1000向量,因此您的nn是1x1000向量。
答案 1 :(得分:0)
x
是1x1000 double
。 nn
中的所有其他值均为1x1
加倍。
当你使用师时,你得到了:
1x1 double ./ 1x1000 double
所以它返回1x1000 doubles
P.S。首先,检查你的循环 - 它计算999次,但p
不是一个阵列。它只包含此循环中的最后一个值!
其次,您不能以这种方式使用x
数组获得单个值。