글쎄요, 귀하의 h
정의가 잘못되었습니다. h
은 추정하려는 각 간격의 단계 크기를 나타냅니다. 불필요하게 2로 나누고 있습니다. h
정의에서 2를 제거하십시오. n
이 아닌 값이 x
인 경우 함수를 평가 중입니다. 이 문장을 사용하지 않을 것이므로 결국이 문장을 제거해야합니다.
또한 홀수 또는 짝수 값의 경우 1에서 N+1
까지 또는 1에서 N-1
까지 합계입니다. 잘못된 값입니다. 홀수 간격 또는 간격으로 다른 모든 값을 선택하므로 실제로는 1에서 N/2 - 1
으로 반복되어야합니다. i
을 곱하면되는 것을 알아내는 것을 피하기 위해 이것을 건너 뛰고 루프를 2 단계로 진행하십시오.
홀수 및 짝수 간격의 값을 루프 오버하거나 추가하지 않는 것이 좋습니다. 홀수 또는 짝수 값인 x
을 지정하고 합계를 적용하면 쉽게 할 수 있습니다. 콜론 연산자를 사용하여 2의 단계 크기를 지정하여 홀수 또는 심지어 전체 합계에 적용 할 값인 x
의 값을 정확히 결정합니다.
또한 x
을 n
포인트 간격으로 선언하지만 루프의 값을 덮어 쓰는 중입니다. 이 경우 코드에 실제로 x
선언이 필요하지 않습니다. 이와 같이
, 여기에 내가 마음에 최적화하여 기능의 수정 된 버전이있어 :
function out = Sc2(func, a, b, N)
h = (b – a)/N; %// Width of each interval
odd = 1 : 2 : n-1; %// Define odd interval
xodd = a + h*odd; %// Create odd x values
even = 2 : 2 : n-2; %// Create even interval
xeven = a + h*even; % Create even x values
%// Return area
out = (h/3)*(func(a) + 4*sum(func(xodd)) + 2*sum(func(xeven))+ func(b));
을하지만, 당신은 당신의 코드가 작동하게하려면, 당신은 단순히 for
을 변경해야 반복 반복 제한뿐만 아니라 사용자의 값은 h
입니다. 또한 코드의 일부 줄을 제거하고 일부 변수 이름을 변경해야합니다. 따라서 :
function out = Sc2(func,a,b,N)
% Sc(func,a,b,N)
% This function calculates the integral of func on the interval [a,b]
% using the Composite Simpson's rule with N subintervals.
%// Define width of each segment
h = (b - a)/N; %// Change
%//define for odd and even sums
sum_even = 0;
for i = 2 : 2 : N-2 %// Change
x = a + i*h; %// Change
sum_even = sum_even + func(x);
end
sum_odd = 0;
for i = 1 : 2 : N-1 %// Change
x = a + i*h %// Change
sum_odd = sum_odd + func(x);
end
%// Output area
out = (h/3)*(func(a) + 2*sum_even + 4*sum_odd + func(b)); %// Change
end
이 숙제입니까? – Jubobs
"제대로 작동하지 않는 것 같습니다."그리고 "어떻게이 알고리즘을 고칠 수 있습니까?" 이 사이트 또는 특정 사이트에서 특정 또는 도움이되지 않습니까? 이 함수를 어떻게 테스트하고 있는지, 즉 어떤 함수를 통합하고 어떻게'Sc2' 함수를 호출하는지 보여주십시오. 오류 메시지가 나타나면 전체를보고하십시오. 결과가 정확한지 어떻게 결정합니까? 질문을 수정하십시오. 숙제 인 경우이를 표시해야합니다. – horchler