Kayan nokta aritmetiğinde, sayısal tutarsızlık neden büyük terimlerin farkına küçük bir terim eklemekten kaynaklanır?


13

Allen ve Tildesley'nin Sıvılar Bilgisayar Simülasyonu kitabını okuyorum. 71. sayfadan itibaren yazarlar, Newton'un hareket denklemlerini moleküler dinamik (MD) simülasyonlarına entegre etmek için kullanılan çeşitli algoritmaları tartışıyorlar. 78. sayfadan itibaren, yazarlar belki de MD'deki kanonik entegrasyon algoritması olan Verlet algoritmasını tartışıyorlar. Belirtiyorlar:

Belki de hareket denklemlerini entegre etmek için en yaygın kullanılan yöntem, başlangıçta Verlet (1967) tarafından benimsenen ve Stormer'a (Gear 1971) atfedilen yöntemdir. Bu yöntem ikinci derece denkleminin doğrudan bir çözümüdür . Yöntem , ivmeler ve önceki adımdaki konumlarına . Pozisyonları ilerletme denklemi aşağıdaki gibidir:mir¨i=fir(t)a(t)r(tδt)

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

Eşitlik hakkında dikkat edilmesi gereken birkaç nokta vardır (3.14). Hızların hiç görünmediği görülecektir. Taylor genişlemesi ile elde edilen denklemlerin ilavesiyle elimine edilmiştir :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)....

Sonra, daha sonra (sayfa 80), yazarlar şöyle diyor:

Verlet algoritmasına karşı ... algoritmanın biçimi gereksiz yere bazı sayısal belirsizlikler getirebilir. Bunun nedeni, eqn (3.14) ' de büyük terimlerin farkına ( ) küçük bir terim ( ) eklendiğinden , Yörünge oluşturmak için. O ( δ t 0 )O(δt2)O(δt0)

Sanırım "küçük terim" ve "büyük terimlerin farkı" .2 r ( t ) - r ( t - δ t )δt2a(t)2r(t)r(tδt)

Sorum şu: Sayısal tutarsızlık neden büyük terimlerin farkına küçük bir terim eklemekten kaynaklanıyor?

Kayan nokta aritmetiğinin detaylarına hiç aşina olmadığım için oldukça temel, kavramsal bir nedenle ilgileniyorum. Ayrıca, bana bu soruyla ilgili kayan nokta aritmetiği ile ilgili temel fikirleri tanıtacak "genel bakış türü" referansları (kitaplar, makaleler veya web siteleri) biliyor musunuz? Zaman ayırdığınız için teşekkürler.

Yanıtlar:


9

`` Algoritmanın şekli gereksiz yere bazı sayısal belirsizlikler getirebilir '' gözlemleri doğrudur. Ancak açıklamaları '' Bu, eqn (3.14) 'te, yörüngeyi oluşturmak için büyük terimlerin ( ) küçük bir terim ( ) eklendiği için ortaya çıkar. '' sahte.O(δt2)O(δt0)

Verlet en algoritmasının hafif sayısal istikrarsızlığın gerçek sebebi fark denklemi, çünkü sadece marjinal kararlı olmasıdır (eğer ihmal esasen dava Verlet cinsinden) sahiptir orantılı bir parazitik çözelti , ki bu da ortaya çıkan hataların cinsinden doğrusal olarak büyümesine neden olurken, dağıtıcı bir diferansiyel denkleme uygulanan tam kararlı bir çok aşamalı yöntem için, hata büyümesi sınırlıdır.xk+1=2xkxk1akk

Düzenleme: Kitap moleküler dinamik sayısal simülasyonu ile ilgili olduğunu Not ve bir çok büyük bir rakam ihtiyacı sonuçlanan beklentilerin makul doğruluğu almak için ile doğruluk ölçekleri olarak, adımların sadece . (Genellikle zaman adımı iç salınım ölçeğini takip etmek için pikosaniyedir. Ancak biyolojik olarak ilgili zaman ölçekleri milisaniye veya daha büyüktür ( ), ancak genellikle bu kadar hesaplanmaz.)NO(N1/2)N109

Daha fazla ayrıntı için bkz. Http://en.wikipedia.org/wiki/Linear_multistep_method#Stability_and_convergence


10

İyi bir tanıtım arıyorsanız, David Goldberg'in Her Bilgisayar Bilimcisinin Kayan Nokta Aritmetiği Hakkında Bilmesi Gerekenler'i öneririm . Biraz fazla ayrıntılı olabilir, ancak çevrimiçi olarak ücretsiz.

İyi bir kütüphaneniz varsa, Michael Overton'ın IEEE Kayan Nokta Aritmetiği ile Sayısal Hesaplamasını veya Nick Higham'ın Sayısal Algoritmaların Doğruluğu ve Kararlılığının ilk birkaç bölümünü öneririm .

Ne Allen ve Tildesley özellikle kastediyoruz sayısal olan İptal . Lafın kısası, diyelim ki, sadece üç basamağa sahip ve eğer çıkarmak olduğunu 100den 101elde edersiniz 1.00(üç haneli). Sayı üç basamak için doğru gibi görünüyor, ancak aslında sadece ilk basamak doğru ve sondaki .00çöp. Neden? Eh, 100ve 101, sadece hatalı gösterimleri söylüyorlar 100.12345ve 101.4321fakat sadece üç basamaklı sayılar olarak depolayabilir.


-1: Verlet formülüne atfettiğiniz iptal nerede? Genellikle küçüktür, bu da ve iptal edilmez. deneyin ! δtr(\tδt)r(t)r(t)=1
Arnold Neumaier

@ArnoldNeumaier: Evet, Allen ve Tildesley'nin örneği pek mantıklı görünmüyor, sadece "büyük terimlerin farkına küçük bir terim [..] eklendiğinde" ortaya çıkan sorunlara biraz referans vermek istedim. OP, verilen davada bir sorun olup olmadığını sordu.
Pedro

Ancak büyük bir terime küçük bir terim eklemek sadece bir yuvarlama hatasıdır, hiç tehlikeli değildir. İptal, küçük bir terim elde etmek için neredeyse eşit iki büyük terimin çıkarılmasıdır. Bu, yalnızca çıkarılan ara ürünler bir hesaplamanın nihai sonucundan çok daha büyük olduğunda veya iptal işleminden etkilenen küçük ara sonuç başka bir küçük öğeye bölündüğünde sorun haline gelir.
Arnold Neumaier

@ArnoldNeumaier: Sanırım cevabımdan oldukça açık olduğu için, toplamı değil, farkı hesaplama probleminden bahsediyordum.
Pedro

1
@ArnoldNeumaier: Alınan nokta, ama umarım bunu bir "-1" için oldukça küçük buluyorum.
Pedro

5

Pedro'nun örneğini denkleme için değişkenlerinizin aşağıdaki değerlerle saklandığını varsayın:(3.14)

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

Gönderen bu takip etmelidir(3.14)

r(t+δt)=103.49

ancak, yalnızca üç basamak kullanabileceğimiz için sonuç kısaltılır

r(t+δt)=103

Bu hata yayılır, böylece 20 adımdan sonra değişmeden kalırsa, yerine ,a(t)r(t+20δt)=331433.90


Ancak etkisi sadece 3 basamaklı ondalık aritmetik olarak büyüktür.
Arnold Neumaier

3

Pedro zaten önemli gerçeği, yani iptali veriyor. Mesele şu ki, hesapladığınız her sayının ilişkili bir doğruluğu vardır; örneğin, tek bir hassas kayan noktalı sayı, yalnızca yaklaşık 8 basamağa kadar olan doğruluk değerlerini temsil edebilir. Neredeyse tamamen aynı olan ancak 7. basamakta farklı olan iki numaranız varsa, fark yine 8 basamaklı tek duyarlıklı kayan nokta sayısı olacaktır ve 8 basamak için doğru gibi görünüyor, ancak gerçekte sadece ilk 1 veya 2 hane doğrudur, çünkü onu hesapladığınız miktarlar farkın ilk 1 veya 2 hanesinin ötesinde doğru değildir.

Şimdi, alıntı yaptığınız kitap 1989'dan geliyor. O zamanlar, hesaplamalar çoğunlukla tek kesinlikte ve yuvarlamada yapıldı ve iptal ciddi problemlerdi. Bugün, çoğu hesaplama 16 basamaklı doğrulukla çift kesinlik kullanılarak yapılır ve bu bugün eskisinden çok daha az bir sorundur. Bir tuz tanesi ile alıntıladığınız paragrafları okumanın ve zamanları bağlamında almanın faydalı olduğunu düşünüyorum.


çifte kesinlik aritmetiğindeki iptal, tek kesinlikteki kadar büyük bir problem olabilir. Bunun bir örneği, pivot olmadan Gauss'un ortadan kaldırılmasıdır, bu da çift hassasiyette bile iptal nedeniyle genellikle çok kötü sonuçlar verir.
Arnold Neumaier

-1: Verlet formülü tipik olarak tek doğrulukta yalnızca 1 veya 2'den 8 değil, tüm doğruluk basamaklarını korur.
Arnold Neumaier

@ArnoldNeumaier: Tabii, aynı hassasiyeti çift hassasiyetle alabilirsiniz. Tek söylediğim, onlarla çok sık karşılaşmadığı.
Wolfgang Bangerth

Bir hesaplama zincirinde 6 haneyi üç kez kaybederseniz, çift hacminde bile tüm basamakları kaybettiniz. İptal işleminden muzdarip algoritmalar genellikle çift kesinlikte bile zayıf olacaktır. Olmadığından Verlet algoritması farklıdır hiçbir iptali ancak hataların hafif bir doğrusal büyümesi. Böylece, doğruluk kaybı çoğalamaz ve böylece daha uzun entegrasyon süreleri için uygun hale gelir. Bu kesinlikle Allen & Tildesley tarafından biliniyordu.
Arnold Neumaier

Sağ. Ama demek istediğim, iptal etmeden bir algoritmanız varsa, tek bir hassasiyetle 1e-8 düzeyinde bir hatayla karşılaşırsınız ve 1e8 zaman adımlarını yaparsanız, her şey doğru olsa bile bir sorununuz olabilir. 1e8 zaman adımları, ODE için sahip olabileceğiniz büyüklük sırasıdır. Öte yandan, çift hassasiyetle, her adımdaki yanlışlığınız 1e-16'dır ve tam bir doğruluk kaybı elde etmek için 1e16 zaman adımı gerektirir. Yani edeceği adımların bir sayıdır değil pratikte karşılaşıyoruz.
Wolfgang Bangerth
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.