실제로 MATLAB에서 사용하지 않고 sinc 함수를 작성하는 방법을 설명해 주시겠습니까?


최상의 답변

\ frac {\ sin x}를 평가하는 함수를 의미합니다. {x} for x \ ne 0 and 1 for x = 0?

분명히

function result = mySinc(x)

\% My implementation of the sinc function.

if x == 0

result = 1;

else

result = sin(x)/x;

end

end

하지만 실제로는 이상적이지 않습니다. 물론, 특이점을 피하고 정확한 수학적 구조를 가지고 있지만 물론 x의 값은 숫자가 아니라 스위치로 표현되는 비트 패턴이라는 것을 기억해야합니다. 하드웨어 및 대략적인 숫자 만 있습니다. 대부분의 경우 잘 작동하지만 제대로 작동하지 않는 상황이 있습니다. 예를 들어 소규모 xa + log(1+x)를 평가할 때 div> 또는 ab가 매우 유사한 값을 가질 때 a-b를 평가할 때. 후자를 순진하게 평가하면 정밀도의 많은 을 잃을 수 있습니다 (때로는 선택의 여지가 없을 수도 있지만). 작은 숫자로 나누는 것도 문제를 일으킬 수 있습니다. 운 좋게도 \ sin x와 x는 | x | \ ll 1 일 때 비교할 수 있습니다. 아마도 “문제가되지 않을 것입니다. 그러나 부동 소수점 산술을 다룰 때”.

이 경우 어떻게해야합니까? x = 0을 중심으로하는 \ frac {\ sin x} {x}의 Taylor 시리즈를 생각해보십시오. 적어 두지는 않겠지 만 계산 방법을 알고 계실 것입니다.

그런 다음 테스트 if x == 0 if abs(x) < sqrt(eps)로 대체하세요. , Matlab에서 eps는 머신 엡실론 (요즘 대부분의 시스템에서 10 ^ {-16}에 해당)을 반환하고 result = 1; by result = ...;, 여기서 ...는 적절한 주문 후 잘린 Taylor 급수 (보통 약 2 하지만 x \ sim 10 ^ {-8}에 대해 선택한 최고 차수의 척도와 결과가 필요한만큼 정확한지 여부를 직접 확인해야합니다.

The 여기서 좋은 점은이 코드를 실행하는 속도에서 잃는 부분이 "정확도를 얻을 수 있다는 것입니다. 특히 사인 적분 \ operatorname {Si} (x) = \ int\_0 ^ xf (t) dt를 평가할 때, 여기서 f (t )는 \ operatorname {sinc} 함수를 도메인으로서의 모든 실수에 대한 연속 확장입니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다