Stærðfræði og reiknifræði

Páll Melsted

19. janúar

Yfirlit

  • Tap á nákvæmni
  • Python yfirlit
  • Taylor raðir

Þ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

  • Föll eru notuð sem eru ekki nógu nákvæm
  • Drögum saman tvær næstum jafnar tölur hvor frá annarri
  • Leggjum saman margar tölur.

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\)

Skólabókardæmi

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.

Annað dæmi

\[ 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}} \]

Python yfirlit

Við getum keyrt python kóða

  • Sem forrit, t.d. python forrit.py
  • Í skel (REPL), með ipython
  • Í notebook með jupyter notebook

Sjá notebook fyrir dæmi

Summur

Þ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.

Taylor raðir

Ö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.

Taylor margliður

\(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\)

  • Oftast notum við \(c=0\)
  • Röðin er ekki alltaf samleitin, þurfum að athuga það sérstaklega
  • Til að vita hversu stórt \(n\) á að vera þá þurfum við að meta villuna.

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.

Dæmi

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\)

Dæmi, reiknum \(sin(x)\)

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.

Dæmi, reiknum \(log(1+x)\)

\[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\)

Dæmi, reiknum \(\ln(x)\)

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\).

Dæmi, reiknum \(\ln(x)\)

Notum það sem við vitum um fleytitölur.

  • \(x>0\) og \(x = 2^k\cdot(1.m)\) þar sem \(k\) er veldisvísir og \(m\) er tölukjarni.
  • Þá er \(ln(x) = k\cdot ln(2) + ln(1.m)\)
  • Talan \(1.m\) er á bilinu \([1,2)\).
  • Setjum \(y=(1.m)/2\) ef \(1.m > \sqrt{2}\) (og hækkum k um 1), annars er \(y=x\).
  • Reiknum \(ln(y)\) með Taylor margliðu