Saya telah membaca buku Computer Simulation of Liquids oleh Allen dan Tildesley. Mulai dari halaman 71, penulis membahas berbagai algoritma yang digunakan untuk mengintegrasikan persamaan gerak Newton dalam simulasi dinamika molekul (MD). Mulai dari halaman 78, penulis membahas algoritma Verlet, yang mungkin merupakan algoritma integrasi kanonik dalam MD. Mereka menyatakan:
Mungkin metode yang paling banyak digunakan untuk mengintegrasikan persamaan gerak adalah yang awalnya diadopsi oleh Verlet (1967) dan dikaitkan dengan Stormer (Gear 1971). Metode ini adalah solusi langsung dari persamaan orde kedua . Metode ini didasarkan pada posisi r ( t ) , akselerasi a ( t ) , dan posisi r ( t - δ t ) dari langkah sebelumnya. Persamaan untuk memajukan posisi berbunyi sebagai berikut:
Ada beberapa poin yang perlu diperhatikan tentang eqn (3.14). Akan terlihat bahwa kecepatan tidak muncul sama sekali. Mereka telah dieliminasi dengan penambahan persamaan yang diperoleh oleh ekspansi Taylor tentang :
Kemudian, nanti (di halaman 80), penulis menyatakan:
Melawan algoritme Verlet, ... bentuk algoritme mungkin tidak perlu memperkenalkan beberapa ketidaktepatan numerik. Ini muncul karena, dalam persamaan (3.14), istilah kecil ( ) ditambahkan ke perbedaan istilah besar ( O ( δ t 0 ) ), untuk menghasilkan lintasan.
Saya kira "istilah kecil" adalah , dan "perbedaan istilah besar" adalah 2 r ( t ) - r ( t - δ t ) .
Pertanyaan saya adalah, mengapa hasil angka tidak tepat dari menambahkan istilah kecil ke perbedaan istilah besar?
Saya tertarik pada alasan konseptual yang agak mendasar, karena saya sama sekali tidak terbiasa dengan detail aritmatika floating point. Juga, apakah Anda tahu referensi "tipe ikhtisar" (buku, artikel, atau situs web) yang akan memperkenalkan saya pada ide dasar aritmatika titik apung yang terkait dengan pertanyaan ini? Terima kasih atas waktunya.
To apply Pedro's example to the equation(3.14) , assume your variables are stored with the following values:
From(3.14) it should follow that
but, since we can only use three digits, the result becomes truncated to
This error will propagate, so that after 20 steps, assuminga(t) remains unchanged, you get r(t+20δt)=331 instead of 433.90 ,
sumber
Pedro already gives the important fact, namely cancellation. The point is that every number you compute with has an associated accuracy; for example, a single precision floating point number can only represent things up to approximately 8 digits of accuracy. If you have two numbers that are almost exactly the same but differ in the 7th digit, then the difference will again be an 8-digit single precision floating point number and it looks like it is accurate to 8 digits, but in reality only the first 1 or 2 digits are accurate because the quantities you computed it from are not accurate beyond this first 1 or 2 digits of the difference.
Sekarang, buku yang Anda kutip adalah dari 1989. Saat itu, perhitungan paling sering dilakukan dalam satu ketepatan dan pembulatan dan pembatalan adalah masalah serius. Saat ini, sebagian besar perhitungan dilakukan dengan menggunakan presisi ganda dengan 16 digit akurasi, dan ini jauh lebih sedikit masalah saat ini daripada sebelumnya. Saya pikir ada baiknya membaca paragraf yang Anda kutip dengan sebutir garam dan mengambilnya dalam konteks waktu mereka.
sumber