数值积分/w Simpson in matlab

问题描述 投票:0回答:1

我创建了一个简单的 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 numerical-methods numerical-integration
1个回答
-1
投票

我对 matlab 还很陌生,但是是否可以调用您在同一函数文件中创建的函数?这就是我在你的 simpson_adaptief 函数中看到的

© www.soinside.com 2019 - 2024. All rights reserved.