我创建了一个简单的 simpson_adaptive 方法,该方法使用我自己的 simpson 方法。 我的辛普森方法是正确的,但我的自适应方法似乎不适用于
integral( sin(2*pi*x)² ) ranging from -1 to 1
以下代码代表自适应辛普森方法。 参数代表函数,[a,b] 是积分区间,e 是精度。
function I = simpson_adaptief(f,a,b,e)
I1 = simpson(f,a,b,2);
I2 = simpson(f,a,b,4);
if (abs(I1-I2)<e)
I = I2;
else
I = simpson_adaptief(f,a,(a+b)/2,e) + simpson_adaptief(f,(a+b)/2,b,e);
end
end
n 这里是函数被分割成的部分的数量。
function I = simpson(f,a,b,n)
h = (b-a)/(n);
p=0;
q=0;
for k=1:2:(n-1)
x=a+h*k;
p=p+f(x);
end
for k=2:2:(n-1)
x=a+h*k;
q=q+f(x);
end
I = h/3*(f(a)+f(b)+4*p+2*q);
end
你们对问题的可能原因有什么建议吗? 其他功能似乎可以工作。
编辑:我认为这与我的
if abs(I1-I2)<e
有关。当我将其更改为 abs(I1-I2)>e
时,它就可以工作,因为我的程序首先执行递归步骤。
提前致谢!
我对 matlab 还很陌生,但是是否可以调用您在同一函数文件中创建的函数?这就是我在你的 simpson_adaptief 函数中看到的