Napake numeričnih metod
Iz E-študij, proste zakladnice študentskega znanja
Napake numeričnih metod nastanejo zato, ker reševanje temelji na približnih podatkih. Tako se pojavi tudi napaka pri rezultatu.
Vsebina |
Viri napak
- matematični model
- ni popoln opis fizikalnega modela
- ne vemo vseh podrobnosti
- človeški faktor
- napake pri računanju
- napake pri programiranju
- napaka v računalniku
- napaka v aritmetični enoti cpu
- nenatančni podatki
- napaka pri meritvi
- računanje z omejeno natančnostjo
- zaokroževalne napake
Izvori napak
- Napake numeričnih metod
absolutna napaka = približna vrednost - točna vrednost
relativna napaka = | (absolutna) napaka | / točna vrednost
Primer
točna vrednost
približna vrednost
- absolutna napaka
An = 3.142857142857143 − π = 0.001264489267349761
- relativna napaka
σ = predznak števila (1 bit)
= mantisa (23 bitov)
e = eksponent - število množenj z 2 (8 bitov)
3.14 : 2
1.57 : 2
> help eps eps is a built-in constant -- Built-in Variable: eps The machine precision. More precisely, `eps' is the largest relative spacing between any two adjacent numbers in the machine's floating point system. This number is obviously system-dependent. On machines that support 64 bit IEEE floating point arithmetic, `eps' is approximately 2.2204e-16.
> eps eps = 2.2204e-16
(1 + ε) − 1 = ε
> (1+eps)-1 ans = 2.2204e-16
> (1+eps/2)-1 ans = 0
Ker pri deljenju eps z 2 zadnji bit odleti ven iz mantise (se odreže) izgubimo na natančnosti.
Relativna napaka je vedno manjša od strojnega ε-a
Računamo produkt
Zaradi približnosti poznamo
ki je število x z neko napako δx
zato računamo
| δx | < < 1
| δy | < < 1
δxy = δx + δy
Deljenje
δx / y = δx − δy
Seštevanje/odštevanje
= x(1 + δx) + y(1 + δy) =
= x + y + xδx + yδy =
(x + y)(1 + δx + y)
x2 − 73x + 1 = 0
x1 = 72.886
x2 = 0.0137
Ik > 0,Ik (padajoče) 0 ?!? .. kaj je kdo hotu tuki napisat?
xk = u
e − xdx = dv
− e − x = v
for k=1:20end
v tem primeru se napake z odštevanjem rekurzivno množijo
Računanje vrednosti polinoma
p = b(a); t=1; for i = 1:n t = t*x; p = p+t*b(i+1); end
število operacij:
lahko ga izboljšamo:
p = a(n+1) for i = n:-1:1 p = p.*x + a(i); end
število operacij:
end