부동 소수점 산술에서 왜 큰 용어의 차이에 작은 용어를 추가하면 수치 부정확성이 발생합니까?


13

Allen과 Tildesley 의 액체 컴퓨터 시뮬레이션 책을 읽었습니다 . 71 페이지부터 저자는 분자 역학 (MD) 시뮬레이션에서 뉴턴의 운동 방정식을 통합하는 데 사용되는 다양한 알고리즘에 대해 설명합니다. 78 페이지에서 시작하여 저자는 MD의 표준 통합 알고리즘 인 Verlet 알고리즘에 대해 설명합니다. 그들은 말한다 :

운동 방정식을 통합하는 데 가장 널리 사용되는 방법은 Verlet (1967)이 처음 채택하고 Stormer (1971 년)에 기인 한 방법 일 것입니다. 이 방법은 2 차 방정식 의 직접 솔루션입니다 . 이 방법은 위치 , 가속도 및 이전 단계 의 위치 를 기반으로합니다. 위치를 전진하는 방정식은 다음과 같습니다.r ( t ) a ( t ) r ( t δ t )mir¨i=fir(t)a(t)r(tδt)

(3.14)r(t+δt)=2r(t)r(tδt)+δt2a(t).

eqn (3.14)에 대해 몇 가지주의 할 사항이 있습니다. 속도가 전혀 나타나지 않는 것을 볼 수 있습니다. 대한 Taylor 확장에 의해 얻은 방정식을 추가하여 제거했습니다 .r(t)

r(t+δt)=r(t)+δtv(t)+(1/2)δt2a(t)+...

(3.15)r(tδt)=r(t)δtv(t)+(1/2)δt2a(t)....

그런 다음 나중에 (80 페이지) 저자는 다음과 같이 말합니다.

Verlet 알고리즘에 대해 ... 알고리즘의 형태는 불필요하게 수치 적으로 부정확 할 수 있습니다. 이는 식 (3.14)에서 작은 항 ( )이 큰 항의 차이 ( )에 추가되기 때문에 발생합니다 . 궤도를 생성하기 위해. O ( δ t 0 )O(δt2)O(δt0)

"작은 용어"는 이고 "큰 용어의 차이"는 .2 r ( t ) r ( t δ t )δt2a(t)2r(t)r(tδt)

내 질문은 왜 숫자 부정확성이 큰 용어의 차이에 작은 용어를 더한 결과입니까?

부동 소수점 산술에 대한 세부 사항에 전혀 익숙하지 않기 때문에 다소 기본적인 개념적 이유에 관심이 있습니다. 또한이 질문과 관련된 부동 소수점 산술의 기본 아이디어를 소개하는 "개요 유형"참조 (도서, 기사 또는 웹 사이트)에 대해 알고 있습니까? 시간 내 줘서 고마워.

답변:


9

``알고리즘의 형태는 불필요하게 수치 적 부정확성을 도입 할 수 있습니다 ''라는 그들의 관찰은 정확합니다. 그러나 ''이것은 eqn (3.14) 에서 궤적을 생성하기 위해 작은 항 ( )이 큰 항의 차이 ( )에 추가되기 때문에 발생합니다. ''는 의심 스럽다.O ( δ t 0 )O(δt2)O(δt0)

Verlet 알고리즘의 약간의 수치 적 불안정성에 대한 진정한 이유는 (본질적 으로 Verlet에서 를 무시 경우 )이 있기 때문에 알고리즘이 조금만 안정적이기 때문입니다. 비례하는 기생 솔루션으로 , 도입 된 오차는 에서 선형으로 증가 하는 반면, 소산 미분 방정식에 적용된 완전 안정된 다단계 방법의 경우 오차 증가가 제한됩니다. a k kxk+1=2xkxk1akk

편집 :이 책은 분자 역학의 수치 시뮬레이션에 관한 것이며, 결과 기대치의 합리적인 정확성을 얻으 려면 정확도가 로만 확장되므로 단계가 필요 합니다. . (종종 시간 단계는 고유 진동 스케일을 따르기 위해 피코 초에 있습니다. 그러나 생물학적으로 관련된 시간 스케일은 밀리 초 이상 ( )이지만 일반적으로 그 정도는 계산하지 않습니다.)O ( N - 1 / 2 ) N 10 9NO(N1/2)N109

자세한 내용은 http://en.wikipedia.org/wiki/Linear_multistep_method#Stability_and_convergence를 참조하십시오 .


10

좋은 소개를 찾고 있다면 David Goldberg의 모든 컴퓨터 과학자가 부동 소수점 산술에 대해 알아야 할 것을 제안 합니다. 너무 자세 할 수 있지만 온라인에서 무료로 사용할 수 있습니다.

좋은 라이브러리가 있다면 IEEE 부동 소수점 산술을 사용한 Michael Overton의 Numerical Computing 또는 Nick Higham의 Numerical Algorithms정확성 및 안정성의 첫 번째 장을 제안 합니다.

Allen과 Tildesley가 구체적으로 언급 한 것은 수치 취소 입니다. 그것의 짧은은, 말하자면, 세 자리 숫자 만 있고 경우 빼기이다 100에서 101, 당신이 얻을 1.00(세 자리에). 숫자는 세 자리까지 정확한 것처럼 보이지만 실제로 첫 번째 자리 만 true이고 후행 .00은 가비지입니다. 왜? 음, 100그리고 101,의 부정확 한 표현은 말을 100.12345하고 101.4321,하지만 당신은 단지 세 자리 숫자로 저장할 수 있습니다.


-1 : Verlet 공식에 따른 취소는 어디에 있습니까? 일반적으로 는 작 으므로 가되고 취소는 발생하지 않습니다. 시도하십시오 ! δtr(\tδt)r(t)r(t)=1
Arnold Neumaier

@ArnoldNeumaier : 예, Allen과 Tildesley의 예는 그다지 이해가되지 않는 것 같습니다. "작은 용어 [..]가 큰 용어의 차이에 추가 될 때"발생하는 문제에 대한 참조 만 제공하고자했습니다. OP는 주어진 경우에 문제가 아닌지 물었다.
페드로

그러나 큰 용어에 작은 용어를 추가하는 것은 반올림 오류 일뿐 위험하지 않습니다. 취소는 작은 용어를 얻기 위해 거의 동일한 두 개의 큰 용어를 빼는 경우입니다. 빼기 된 중간체가 계산의 최종 결과보다 훨씬 크거나 취소의 영향을받는 작은 중간 결과를 다른 작은 요소로 나눈 경우에만 문제가됩니다.
Arnold Neumaier

@ArnoldNeumaier : 내 대답에서 분명히 알 수 있듯이, 나는 합계가 아니라 차이를 계산하는 문제를 언급하고있었습니다.
페드로

1
@ArnoldNeumaier : 점을 찍었지만 "-1"에 대해 아주 사소한 것으로 생각합니다.
페드로

5

Pedro의 예를 방정식 적용하려면 변수가 다음 값으로 저장되어 있다고 가정하십시오.(3.14)

r(t)=101
r(tδt)=100
δt2a(t)=1.49

에서 가 그 따라야한다(3.14)

r(t+δt)=103.49

그러나 세 자리 만 사용할 수 있기 때문에 결과가 잘립니다.

r(t+δt)=103

이 오류는 전파되므로 가 변경되지 않은 것으로 가정하면 20 단계 후에 대신 됩니다 .R ( t + 20 δ t ) = 331 433.90을a(t)r(t+20δt)=331433.90


그러나 그 효과는 3 자리 10 진수 산술에서만 큰 것입니다.
Arnold Neumaier

3

페드로는 이미 중요한 사실, 즉 취소를 제공합니다. 요점은 계산하는 모든 숫자의 정확도가 관련되어 있다는 것입니다. 예를 들어, 단 정밀도 부동 소수점 숫자는 최대 약 8 자리의 정확도 만 나타낼 수 있습니다. 거의 정확히 동일하지만 7 번째 숫자가 다른 두 개의 숫자가있는 경우 차이는 다시 8 자리의 단 정밀도 부동 소수점 숫자가되고 8 자리까지 정확하지만 실제로는 첫 번째 숫자 만 나타납니다 계산 한 수량이 차이의 처음 1 또는 2 자리를 초과하여 정확하지 않기 때문에 1 또는 2 자리 숫자는 정확합니다.

이제 여러분이 인용 한 책은 1989 년입니다. 그 당시 계산은 단 정밀도로 이루어졌으며 반올림과 취소는 심각한 문제였습니다. 오늘날 대부분의 계산은 16 자리의 정확도로 배정도를 사용하여 수행되며 이는 오늘날보다 훨씬 적은 문제입니다. 나는 당신이 소금 한 알로 인용 한 단락을 읽고 그들의 시간의 맥락에서 그것들을 취하는 것이 가치가 있다고 생각합니다.


배정도 산술에서의 취소는 단 정도에서와 같이 큰 문제가 될 수 있습니다. 예를 들어 피벗하지 않은 가우시안 제거가 배정도로 인해 취소로 인해 결과가 매우 좋지 않은 경우가 종종 있습니다.
Arnold Neumaier

-1 : Verlet 공식은 일반적으로 단 정밀도에서 8의 1 또는 2가 아닌 모든 정확도를 유지합니다.
Arnold Neumaier

@ArnoldNeumaier : 물론, 같은 종류의 문제를 배정 밀도로 얻을 수 있습니다. 내가 말한 것은 사람이 자주 만나지 않는다는 것입니다.
Wolfgang Bangerth

일련의 계산에서 6 자리 숫자를 3 번 ​​잃으면 배정도에서도 모든 숫자를 잃게됩니다. 취소로 고통받는 알고리즘은 일반적으로 배정도에서도 열악합니다. 이 없기 때문에 Verlet의 알고리즘은 다른 어떤 취소되었지만 오류의 온화한 선형 성장. 따라서 정확도 손실이 배가 될 수 없으므로 훨씬 긴 통합 시간에 적합합니다. 이것은 Allen & Tildesley에게 확실하게 알려졌습니다.
Arnold Neumaier

권리. 그러나 내가 의미하는 것은 취소하지 않고 알고리즘을 사용하는 경우 여전히 단 정밀도로 1e-8 순서로 오류가 발생하고 1e8 시간 단계를 수행하면 다른 모든 것이 정확하더라도 문제가 발생할 수 있습니다. 1e8 시간 단계는 ODE에 대한 규모입니다. 반면, 배정도에서 각 단계의 부정확도는 1e-16이며 정확도의 완전한 손실을 얻으려면 1e16 시간 단계가 필요합니다. 그것은 실제로 당신이 겪지 않을 많은 단계입니다 .
Wolfgang Bangerth
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.