필자는 내 자신의 심슨 메서드를 사용하는 간단한 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
으로 변경하면 내 프로그램이 재귀 단계를 먼저 수행하므로 작동합니다. 사전에
감사합니다!
제가 도울 수는 있지만 문제가 무엇인지 정확히 모릅니다. 당신은 어떤 기능이 효과가 없다고 말했으나 어떤 방식으로 작동하지 않는지는 분명하지 않습니다. –
@Fletch [-1,1]에 대한 sin (2 * pi * x)^2의 적분에 대한 해답은 1이라고 가정합니다. 정상적인 심슨 방법을 사용할 때 나는 1을 얻지 만, simpson_adaptief를 사용할 때 나는 3.9994 그 결과로 e-032. 감사합니다 :) – drx