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

Páll Melsted

26. janúar

Yfirlit

  • Taylor raðir
  • Meira Python, strengir og listar

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

Meira Python

Töluleg diffrun

Við munum aðeins tala um föll \(f(x)\) sem haga sér vel á einhverju bili, þ.e. eru samfelld og óendanlega oft diffranleg.

Rifjum upp skilgreininguna á afleiðunni \(f'(x)\)

\[ f'(x) = \lim_{h\to 0}\frac{f(x+h)-f(x)}{h} \]

Athugið að í markgildinu getur \(h\) verið jákvætt eða neikvætt.

Töluleg diffrun

Verkefnið sem við fáum er að fallið \(f\) er gefið, annað hvort sem formúla eða forritsbútur og við þurfum að finna afleiðuna. Ef við vitum ekki hvert fallið er eða það er of flókið, þá þurfum við að diffra tölulega.

Gefið \(x\) þá þurfum við að finna gildið \(f'(x)\). Nokkrar leiðir

  • Skrifa formúluna fyrir \(f(x)\) og beita reikniaðferðum fyrir diffrun til að finna formúluna fyrir \(f'(x)\) (Symbolic differentiation)
  • Skrifa \(f\) á abstract syntax tree formi og búa til samsvarandi kóða fyrir afleiðuna (Automatic differentiation)
  • Finna fall \(g\) sem er tölulega mjög nálægt \(f'\) og notar bara fallið \(f\) (Numerical differentiation)

Síðasti kosturinn heitir töluleg diffrun

Fyrsta tilraun

Notum skilgreininguna á \(f'\) og reiknum

\[ f'(x) \approx \frac{f(x+h)-f(x)}{h} \]

fyrir \(h\) nógu nálægt núlli.

Eftir því sem \(h\) verður minna þá eru \(f(x+h)\) og \(f(x)\) mjög líkar tölur og hætta á að markverðir aukastafir tapist.

Skekkja

Notum Taylor margliðuna fyrir \(f(x+h)\) í kringum punktinn \(x\).

\[ f(x+h) = f(x) + f'(x)\cdot h + \frac{f''(t)}{2}h^2 \]

þar sem \(x < t < x+h\). Þá fæst

\[ \frac{f(x+h)-f(x)}{h} = f'(x) + \frac{f''(t)}{2}h \]

Svo villan er \(O(h)\) (þ.e. einhver fasti sinnum \(h\))

Dæmi

Skoðum \(f(x) = xe^x\). \(f'(x) = e^x + xe^x\).

Miðju aðferð

Einfalda aðferðin er ekki nógu góð því villan vex eins og \(h\), helst viljum við fá minni villu.

Skoðum Taylor margliðuna fyrir \(f(x+h)\) og \(f(x-h)\)

\[ \begin{aligned} f(x+h) &= f(x) + f'(x)\cdot h + \frac{f''(x)}{2}\cdot h^2 + \frac{f''(t_1)}{6}h^3\\ f(x-h) &= f(x) - f'(x)\cdot h + \frac{f''(x)}{2}\cdot h^2 - \frac{f''(t_2)}{6}h^3 \end{aligned} \] Þá fæst að

\[ \frac{f(x+h)-f(x-h)}{2h} = f'(x) + O(h^2) \]

sem gefur mun betri nálgun.

Almenn regla

Þegar við notum miðju aðferð til að finna tölulega afleiðu þá þurfum við að velja \(h\) mátulega lítið

  • of stórt \(h\) og þá verður nálgunin ekki nógu góð
  • of lítið \(h\) og reikniskekkjan í \(f(x+h)\) og \(f(x-h)\) verður of mikil

Þumalputtaregla er að nota

\[ h = 2\sqrt{\frac{\varepsilon |f(x)|}{|f''(x)|}} \]

Þar sem \(\varepsilon \approx 10^{-16}\). Ef gildin á \(f(x)/f''(x)\) eru ekki þekkt getur verið nóg að nálga þau mjög gróft upp að réttum tug.