Þegar við viljum vinna með töluna \(x\) verður hún nálguð með \(x^{* }\). Mismunurinn er villan í svarinu.
Nákvæmt svar = nálgun + villa
Þessi villa getur komið til vegna þess að \(x\) er ekki fleytitala, útreikningar gætu verið ónákvæmir eða vegna þess að villan getur safnast upp.
Hlutfallsleg villa er táknuð með \(\alpha = (x-x^{* })/x\).
Ef \(\alpha\) er lítil er hún nálægt \(\alpha/(1-\alpha) = (x-x^{* })/x^{* }\), sem getur verið þægilegra að meta.
Ef \(2^s \le |x| < 2^{s+1}\) og \[|x-x^{* }| \le 2^{-(s-r)+1}\] þá er \(x^{* }\) rétt með \(r\) bitum (eða \(r/3.3\) tugastöfum), þ.e. hlutfallslega villan er \[ \frac{|x-x^{* }|}{|x|} \le 2^{-r+1} \]
Með 64-bita fleytitölum er villan í framsetningu mjög lítil, yfirleitt \(\approx 2^{-52} \approx 10^{-15}\).
Hins vegar getur nákvæmni tapast þegar
T.d. ef \(x=1.1234567890123456789\) og \(y=1.213456789012345\) þá er \[ x-y = 6.789\cdot 10^{-16}\] \[ x^{* }-y^{* } = 6.66 \cdot 10^{-16} \] Hlutfallsleg villa er \(0.019\)
Jafnan \[ ax^2 + bx + c = 0 \] Hefur tvær rætur þegar \(D=b^2-4ac > 0\), þær eru \[ x = \frac{-b\pm\sqrt{b^2-4ac}}{2a} \]
Gerum ráð fyrir að \(b>0\).
Ef \(b^2 >> 4ac\) þá eru tölurnar \(b\) og \(\sqrt{b^2-4ac}\) mjög nálægt hvor annarri og nefnarinn verður lítill í annarri lausninni og villan magnast upp.
Til að leysa þetta notum við formúluna fyrir fyrri rót
\[ x_1 = \frac{-b-\sqrt{b^2-4ac}}{2a} \]
En lengjum með \(\frac{\sqrt{b^2-4ac}+b}{\sqrt{b^2-4ac}+b}\) til að fá seinni rótina
\[ x_2 = \frac{-2c}{\sqrt{b^2-4ac} + b} \]
Sem tapar ekki nákvæmni.
\[ f(x) = \sqrt{x+1} - \sqrt{x} \]
Ef \(\sqrt{x+1}\) og \(\sqrt{x}\) eru svipað stórar getur nákvæmni tapast. T.d. þegar \(x=10^{16}\) fæst \(f(x)=0\).
Lengjum með \[ \frac{\sqrt{x+1}+\sqrt{x}}{\sqrt{x+1}+\sqrt{x}}\] og fáum
\[ f(x) = (\sqrt{x+1} - \sqrt{x})\frac{\sqrt{x+1}+\sqrt{x}}{\sqrt{x+1}+\sqrt{x}} = \frac{1}{\sqrt{x+1} + \sqrt{x}} \]
Við getum keyrt python kóða
python forrit.pyipythonjupyter notebookSjá notebook fyrir dæmi
Þegar við leggjum saman tölur getur röðin skipt máli, sérstaklega ef þær eru misstórar
t = [1e16,1,2,3]
sum(t) # 1.0000000000000004e+16
sum(t[::-1]) # 1.0000000000000006e+16
Hlutfallsleg villa er í báðum tilfellum mjög lítil, en verður verri ef stórar tölur styttast út.
Örgjörvar geta flestir bara framkvæmt einfaldar reikniaðgerðir. Flóknari föll eins og \(\sqrt{x},\sin(x), e^x\) og \(\ln(x)\) eru ekki innbyggð. Algengasta leið til að nálga föll er að nota margliður sem eru næstum eins og föllin.
T.d. ef \(x\) er mjög lítil tala er ekki mikill munur á \(\sin(x)\) og \(x\). Fyrir stærri gildi á \(x\) þurfum við að gera eitthvað betra.
Lausnin er yfirleitt að nota Taylor margliður til að nálga föllin. Aðrar tegundir af margliðum geta verið betri en er alltof flókið til að tala um hér.
\(f(x)\) er óendanlega diffranlegt fall á bili \([a,b]\) og \(c\in [a,b]\). Taylor margliðan af stigi n, \(T_n(x)\) er þá skilgreind sem
\[ \begin{aligned} T_n(x) &= f(c) + f'(c)(x-c) + \frac{f''(c)}{2}(x-c)^2 + \frac{f'''(c)}{6}(x-c)+\ldots+\frac{f^{(n)}(c)}{n!}(x-c)^n\\ &= \sum_{i=0}^n \frac{f^{(i)}(c)}{i!}(x-c)^i \end{aligned} \]
og við skilgreinum afganginn \(R_{n+1}(x) = f(x) - T_n(x)\).
Taylor röð er óendanlega summan \(\sum_{i=0}^\infty \frac{f^{(i)}(c)}{i!}(x-c)^i\)
Fyrir hvert \(x\in[a,b]\) er til einhver tala \(t\in(c,x)\) þannig að \[R_{n+1} = \frac{f^{(n+1)}(t)}{(n+1)!}(x-c)^{n+1}\]
Notum þessa formúlu til að finna efra mat á villuna.
Nokkrar þekktar Taylor raðir
\(\sin(x) = x - \frac{x^3}{3!} + \frac{x^5}{5!} +\ldots = \sum_{i=0}^\infty \frac{(-1)^{i}}{(2i+1)!}x^{2i+1}\)
\(\cos(x) = 1 - \frac{x^2}{2!} + \frac{x^4}{4!} +\ldots = \sum_{i=0}^\infty \frac{(-1)^{i}}{(2i)!}x^{2i}\)
\(e^x = 1 + x + \frac{x^2}{2} + \frac{x^3}{3!} + \ldots = \sum_{i=0}^\infty\frac{1}{i!}x^i\)
\(\ln(x) = (x-1) - \frac{(x-1)^2}{2} + \frac{(x-1)^3}{3}+\ldots = 1 + \sum_{i=1}^\infty\frac{(-1)^{i-1}}{i}(x-1)^i\)
Skoðum \(sin(x)\) á bilinu \([-\frac{\pi}{4},\frac{\pi}{4}]\). Öll önnur gildi er hægt að reikna með því að hliðra til um \(\frac{\pi}{2}\) og mögulega breyta formerki eða nota \(\cos\)
Villan er \[R_{n+1}(x) = \frac{\sin^{(n+1)}(t)}{(n+1)!}(x)^{n+1}\]
Við vitum að \(\sin^{(n+1)}(t)\) er annað hvort \(\sin\) eða \(\cos\) svo að tölugildið er í mesta lagi 1. Einnig er \(|x^{n+1}| \le (\frac{\pi}{4})^{n+1}\).
Dugar að taka \(n=12\) til að fá mjög litla villu.
\[f(x) = \log(1+x)\]
Nema annað sé sérstaklega tekið fram þá þýðir \(\log\) náttúrulegi logrinn.
Ef \(x\) er lítil tapast markverðir stafir í \(1+x\) og \(\log(1+x)\) verður ónákvæmt.
Nálgum \(f(x)\) með Taylor röð í kringum \(x=0\) \[ \begin{aligned} f(x) &= \log(1+x) && f(0) = 0\\ f'(x) &= \frac{1}{1+x} && f'(0) = 1\\ f''(x) &= \frac{-1}{(1+x)^2} && f''(0) = -1\\ f'''(x) &= \frac{2}{(1+x)^3} && f'''(0) = 2 \end{aligned} \] Þá er \[ f(x) = 0 + x - \frac{x^2}{2} + O(x^3) \] Þar sem \(O(x^3)\) þýðir að villan er ca. jafnstór og \(x^3\)
Taylor röðin \[\ln(x) = (x-1) - \frac{(x-1)^2}{2} + \frac{(x-1)^3}{3}+\ldots = 1 + \sum_{i=1}^\infty\frac{(-1)^{i-1}}{i}(x-1)^i\]
Er samleitin þegar \(0 < x \le 2\), en við þyrftum mjög marga liði til að reikna nákvæmlega fyrir \(x=2\).
Notum það sem við vitum um fleytitölur.