계산


13

함수 x = 0 근처에 특이점을 갖습니다 . 님 비록 그 특이점이 해제 될 수있다 , X = 1 , 하나 있어야 F ( X ) = 1을 보낸 사람, X = Σ K = 0 X Kf:x(ex1)/xx=0x=1f(x)=1 따라서 (ex-1)/x=k=1x k - 1

ex=k=0xkk!
그러나(ex-1)/x 형식x=0으로정의 될뿐만 아니라해당 지점 부근에서 수치 적으로 불안정합니다. 매우 작은x에대해f(x)를수치 적으로 평가하기 위해Taylor 확장, 즉 위에서 언급 한 전력 계열의 절단을 사용할 수 있습니다.
(ex1)/x=k=1xk1k!
(ex1)/xx=0f(x)x

Q : 함수 의 이름이 있습니까? 다시 말해, 이것이 일반적인 문제입니까?f

Q :이 상황을 잘 처리하는 C / C ++ 라이브러리를 아는 사람이 있습니까? 예를 들어 0 근처에서 적절한 정도의 Taylor 확장을 사용하고 다른 표현은 0에서 멀리 떨어져 있습니까?

답변:


19

expm1ex1x=0


17

이것은 취소 오류의 인스턴스입니다. C 표준 라이브러리 (C99 기준)에는 expm1이 문제를 피하는 함수가 포함되어 있습니다. expm1(x) / x대신에 사용 (exp(x) - 1.0) / x하면이 문제가 발생하지 않습니다 (아래 그래프 참조). <code> fabs (expm1 (x) / x-(exp (x)-1.0) / x) </ code>

이 특정 문제의 세부 사항과 해결책 은 수치 알고리즘정확성과 안정성 섹션 1.14.1 에서 자세히 논의됩니다 . 같은 해결책이 W. Kahan의 논문 19 페이지 에서 부동 소수점 계산에서 무의미한 라운드 오프 평가는 어떻게됩니까? . expm1GNU C 라이브러리에서 의 실제 구현은 위의 참조에서 설명한 접근 방식과 다르며 소스 코드에 자세히 설명되어 있습니다 .


1
고마워, 그게 내가 필요한 것 뿐이야! 불행히도, 나는 하나의 답변 만 받아 들일 수 있습니다 ...
anonymous

물론이야! 문제 없음 :-)
후안 M. 벨로 - 리 바스

3

첫 번째 질문에 대답하기 위해 아니요, 함수에는 이름이 없습니다 (적어도 널리 알려진 이름은 아님).

다른 사람들이 언급했듯이 함수를 계산하는 가장 좋은 방법은 몇 가지 특수한 경우를 처리하는 것입니다. 이것은 라이브러리가 함수를 계산하는 방법입니다.

  1. 사례 0 : x = 0, 1을 반환합니다.
  2. |x|<δ1+x/2δdouble2e-85e-4
  3. 다른 경우 : return expm1(x)/x.

잘린 Taylor 시리즈를 사용하면 더 정교하고 특별한 경우가 많을 수 있지만 그만한 가치는 없을 것입니다. 실제로 k20이 지적했듯이 취소가 안전하기 때문에 사례 1을 별도로 처리해야한다는 것은 명확하지 않습니다. 그러나 별도로 처리하면 더 자신감을 가질 수 있습니다.


2

이 질문은이 사이트의 앞부분에서 요청 된 것을 기억하며 놀랍게도 정답은 0과 정확히 같은 경우에만 필요하다는 것입니다. 오류는 거의 0에 가깝습니다. 링크가 없습니다.

예,이 답변은 완전히 틀 렸습니다. 왜 그렇게 많이 찬성되었는지 확실하지 않습니다. 내가 생각했던 링크를 찾았습니다. 그것은 scicomp stackexchange가 아니라 math stackexchange에 있습니다 . expm1-free 오류 소거 수식 JM 의해 주어진 대답 및 사용되는 u = exp(x)변환.


xdx(edx1)/dx(1+dx1)/dx1

1
dx1+dx=1

0

첫 번째 질문에 답하고 두 번째 질문에 (아마도 수치 적으로 비효율적 인) 방법을 제공하려면 이것이 Bernoulli 수생성 함수의 역수라는 점에 유의하십시오 .


지적 해 주셔서 감사합니다. 불행히도, 나는 트리플 합계가 이것을 엄청나게 비쌀 것이라고 믿는다. 또한, 원하는 정확도를 얻기 위해 각 합계를자를 위치를 명확하게 알 수 없습니다.
익명

@ 익명 : 어떤 3 배 합계를 의미합니까? Bernoulli 다항식이 필요하지 않고 Bernoulli 숫자 만 필요하며 사전에이를 나열 할 수 있습니다. 그러나 예, 여전히 Taylor 시리즈보다 낫지는 않습니다.
Nikolaj-K

그래도 입력에 고정 된 유한 수만 필요하다는 것이 확실하다면 미리 계산할 수 있습니다.
익명

@anonymous : 예, Taylor 계수를 미리 나열한 것처럼 말입니다.
Nikolaj-K
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.