Urutan operasi, algoritma numerik


10

Saya sudah membaca itu

(1) Operasi yang terkondisi harus dilakukan sebelum yang terkondisi dengan baik.

Sebagai contoh, seseorang harus menghitung xz−yz sebagai(x−y)z karena pengurangan tidak dikondisikan sedangkan multiplikasi tidak.

Namun, analisis kesalahan orde pertama dari kedua algoritma mengungkapkan bahwa mereka hanya berbeda oleh faktor tiga (*), dan saya tidak melihat mengapa orang dapat menggeneralisasikan ini ke pernyataan (1), dan saya juga tidak secara intuitif memahami pentingnya urutan operasi. Apakah menurut Anda pernyataan itu (1) adalah aturan yang diterima, dan apakah Anda punya penjelasan lain untuk itu?

*: lebih khusus, versi pertama memiliki kesalahan relatif yang dibatasi oleh

eps+3|x|+|y||x|−|y|eps
sementara kesalahan relatif dari versi kedua dibatasi oleh

3eps+|x|+|y||x|−|y|eps

dimanaeps adalah presisi mesin.

Analisis ini didasarkan pada asumsi bahwa hasil menengah ke- dikalikan dengan (karena kesalahan pembulatan), di mana adalah variabel acak pertama yang dibatasi oleh . "Urutan pertama" berarti bahwa istilah dengan tingkat lebih tinggi, seperti , diabaikan.i(1+εi)εiepsϵiϵjx


Dimana Anda membaca itu?
— David Ketcheson

dalam catatan kuliah saya
— Bananach

Jawaban:


8

Mari kita tunjukkan dengan (Saya malas mencoba untuk mendapatkan versi yang dilingkari dari operator divisi) analog floating-point dari perkalian yang tepat (× ), penambahan ( + ), dan pengurangan ( - ), masing-masing. Kami akan menganggap (IEEE-754) bahwa untuk semuanya [ x ⊕ y ] = ( x + y ) ( 1⊗,⊕,⊖×+− mana ϵ m a c h adalah mesin epsilon yang memberikan batas atas pada kesalahan relatif karena pembulatan. Kami juga akan menggunakan lemma berikut (dengan asumsi semua | δ i | ≤ ε m a c h , dan m tidak terlalu besar) yang dapat dengan mudah dibuktikan: m Π i = 1 ( 1 + δ i

[x⊕y]=(x+y)(1+δ⊕),|δ⊕|≤ϵmach,
ϵmach|δi|≤ϵmachm
∏i=1m(1+δi)=1+θ(m),|θ(m)|≤mϵmach1−mϵmach

fx,y,z

f(x,y,z)=(x×z)−(y×z)

f1~f2~x~=x(1+δx),y~,z~ , sebagai berikut:

f1~(x~,y~,z~)=(x~⊗z~)⊖(y~⊗z~),

f2~(x~,y~,z~)=(x~⊖y~)⊗z~.

f1~

f1~=((x(1+δx)×z(1+δz))(1+δ⊗xz)⏟(x~⊗z~)−(y(1+δy)×z(1+δz))(1+δ⊗yz)⏟(y~⊗z~))(1+δ⊖)=xz(1+δx)(1+δz)(1+δ⊗xz)(1+δ⊖)−yz(1+δy)(1+δz)(1+δ⊗yz)(1+δ⊖)=xz(1+θxz,1)−yz(1+θyz,1).
|θxz,1|,|θyz,1|≤4ϵmach1−4ϵmach

f2~

f2~=(((x(1+δx)−y(1+δy)(1+δ⊖xy))×(z(1+δz)))(1+δ⊗)=xz(1+δx)(1+δz)(1+δ⊖xy)(1+δ⊗)−yz(1+δy)(1+δz)(1+δ⊖xy)(1+δ⊗)=xz(1+θx,2)−yz(1+θy,2).
|θx,2|,|θy,2|≤4ϵmach1−4ϵmach

f1~f2~f2~f1~

xy

|f1~−f||f|=|xz+xzθxz,1−yz−yzθyz,1−(xz−yz)||xz−yz|=|xθxz,1−yθyz,1||x−y|≤|x|+|y||x−y|4ϵmach1−4ϵmach,
|f2~−f||f|=|xz+xzθx,2−yz−yzθy,2−(xz−yz)||xz−yz|=|xθx,2−yθy,2||x−y|≤|x|+|y||x−y|4ϵmach1−4ϵmach.

θx,y,z(x−y)xy

x,y,z,f(x,y,z)∈F0F0 adalah himpunan semua angka floating-point normal.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.