2014-04-26 1 views
2

필자는 내 자신의 심슨 메서드를 사용하는 간단한 simpson_adaptive 메서드를 만들었습니다. 내 심슨 방법은 정확하지만 내 적응 방법은Numerical integration/w Simpson in matlab

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으로 변경하면 내 프로그램이 재귀 단계를 먼저 수행하므로 작동합니다. 사전에

감사합니다!

+0

제가 도울 수는 있지만 문제가 무엇인지 정확히 모릅니다. 당신은 어떤 기능이 효과가 없다고 말했으나 어떤 방식으로 작동하지 않는지는 분명하지 않습니다. –

+0

@Fletch [-1,1]에 대한 sin (2 * pi * x)^2의 적분에 대한 해답은 1이라고 가정합니다. 정상적인 심슨 방법을 사용할 때 나는 1을 얻지 만, simpson_adaptief를 사용할 때 나는 3.9994 그 결과로 e-032. 감사합니다 :) – drx

답변

-1

저는 matlab에 처음 접했지만 같은 함수 파일 내에서 작성중인 함수를 호출 할 수 있습니까? 그것이 내가 당신의 심슨 _ 보조 기능에서 보는 것입니다.

+0

그것은 할 수있다 (나는 재귀가 matlab에 어떻게 작동하는지 생각한다.) y = exp (x) (a = -1, b = 1)와 다른 함수와 같은 함수는 내 방식을 사용하지만 작동하지 않는다. sin (2 * pi * x) ². 내 생각에 "abs (I1-I2) drx

+0

그래, 나도 잘 모르겠다. – mexcool