MN09LAB: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Przykry (dyskusja | edycje)
Dorota (dyskusja | edycje)
Nie podano opisu zmian
Linia 1: Linia 1:
<!--  
<!--  
Konwertowane  z pliku LaTeX przez latex2mediawiki, zob. http://www.ii.uj.edu.pl/&nbsp;pawlik1/latex2mediawiki.php
Konwertowane  z pliku LaTeX przez latex2mediawiki, zob. http://www.ii.uj.edu.pl/&nbsp;pawlik1/latex2mediawiki.php
Linia 18: Linia 17:


<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka </span><div class="mw-collapsible-content" style="display:none">
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka </span><div class="mw-collapsible-content" style="display:none">
<div style="font-size:smaller; background-color:#efe"> Aby uprościć wagi w drugim wzorze barycentrycznym zauważ, że skalowanie <strong>wszystkich wag</strong> przez tę samą stałą nie wpływa na jego wartość. </div>
<div style="font-size:smaller; background-color:#efe"> Aby uprościć wagi w drugim wzorze barycentrycznym, zauważ, że skalowanie <strong>wszystkich wag</strong> przez tę samą stałą nie wpływa na jego wartość. </div>
</div></div>
</div></div>


Linia 33: Linia 32:
Zaimplementuj drugi wzór barycentryczny tak, by w efekcie dostać dwie procedury:
Zaimplementuj drugi wzór barycentryczny tak, by w efekcie dostać dwie procedury:
* <code>c = polfitb(x,y)</code> --- wyznaczającą współczynniki<math>\displaystyle c</math> wielomianu interpolującego wartości <math>\displaystyle y</math> w węzłach <strong>równoodległych</strong> <math>\displaystyle x</math>;
* <code>c = polfitb(x,y)</code> --- wyznaczającą współczynniki<math>\displaystyle c</math> wielomianu interpolującego wartości <math>\displaystyle y</math> w węzłach <strong>równoodległych</strong> <math>\displaystyle x</math>;
* <code>Y = polvalb(X,c)</code> --- wyznaczającą, w zadanych węzłach <math>\displaystyle X</math>, wartości <math>\displaystyle Y</math> wielomianu interpolacyjnego o współczynnikach <math>\displaystyle c</math>.
* <code>Y = polvalb(X,c)</code> --- wyznaczającą w zadanych węzłach <math>\displaystyle X</math> wartości <math>\displaystyle Y</math> wielomianu interpolacyjnego o współczynnikach <math>\displaystyle c</math>.
   
   
Oszacuj koszt Twojego algorytmu i porównaj z kosztem algorytmu różnic dzielonych (dla współczynników) i algorytmem Hornera (dla wartości) w dwóch przypadkach:  
Oszacuj koszt twojego algorytmu i porównaj z kosztem algorytmu różnic dzielonych (dla współczynników) i algorytmem Hornera (dla wartości) w dwóch przypadkach:  
* kiedy jest dużo węzłów interpolacji, a potrzebna jest tylko jedna wartość wielomianu interpolacyjnego;
* kiedy jest dużo węzłów interpolacji, a potrzebna jest tylko jedna wartość wielomianu interpolacyjnego;
* na odwrót, kiedy jest mało węzłów interpolacji, a potrzeba wyznaczyć bardzo dużo wartości wielomianu interpolacyjnego.
* na odwrót, kiedy jest mało węzłów interpolacji, a potrzeba wyznaczyć bardzo dużo wartości wielomianu interpolacyjnego.
Linia 42: Linia 41:


<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"><div style="margin-left:1em">   
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"><div style="margin-left:1em">   
Musimy wyznaczyć współczynniki wagowe <math>\displaystyle w_j</math>. Jeśli z góry wiemy, że np. stopień naszego wielomianu interpolacyjnego nie przekroczy, powiedzmy, 20, to możemy przyspieszyć naszą procedurę, wykonując <strong>precomputing</strong>: wszak wagi w drugim wzorze barycentrycznym są wyznaczone niezależnie od węzłów!
Musimy wyznaczyć współczynniki wagowe <math>\displaystyle w_j</math>. Jeśli z góry wiemy, że np. stopień naszego wielomianu interpolacyjnego nie przekroczy 20, to możemy przyspieszyć naszą procedurę, wykonując <strong>precomputing</strong>: wszak wagi w drugim wzorze barycentrycznym są wyznaczone niezależnie od węzłów!


Zatem musimy wyliczyć (całkowite!) wartości trójkątnej tabelki
Zatem musimy wyliczyć (całkowite!) wartości trójkątnej tabelki
Linia 70: Linia 69:
<div class="exercise">
<div class="exercise">


Często w aplikacjach takich jak programy CAD zachodzi potrzeba dodania na bieżąco dodatkowego węzła interpolacji. Podaj jak to zrobić --- i jaki to będzie miało koszt --- gdy interpolant jest zadany w bazie
Często w aplikacjach takich jak programy CAD zachodzi potrzeba dodania na bieżąco dodatkowego węzła interpolacji. Podaj, jak to zrobić i jaki to będzie miało koszt, gdy interpolant jest zadany w bazie
* naturalnej
* naturalnej
* Newtona
* Newtona
Linia 90: Linia 89:
<div class="exercise">
<div class="exercise">


Pokazać, że algorytm Hornera obliczania wartości <math>\displaystyle w(\xi)</math> wielomianu danego w postaci potęgowej jest jednocześnie algorytmem dzielenia tego wielomianu przez jednomian <math>\displaystyle (x-\xi)</math>. Dokładniej, jeśli <math>\displaystyle w(x)=\sum_{j=0}^n a_jx^j</math> to  
Pokaż, że algorytm Hornera obliczania wartości <math>\displaystyle w(\xi)</math> wielomianu danego w postaci potęgowej jest jednocześnie algorytmem dzielenia tego wielomianu przez jednomian <math>\displaystyle (x-\xi)</math>. Dokładniej, jeśli <math>\displaystyle w(x)=\sum_{j=0}^n a_jx^j</math> to  


<center><math>\displaystyle w(x)\,=\,\Big(\sum_{j=1}^n v_jx^{j-1}\Big) \cdot (x-\xi)\,+\,v_0,
<center><math>\displaystyle w(x)\,=\,\Big(\sum_{j=1}^n v_jx^{j-1}\Big) \cdot (x-\xi)\,+\,v_0,
Linia 102: Linia 101:
<div class="exercise">
<div class="exercise">


Pokazać numeryczną poprawność algorytmu Hornera obliczania wartości wielomianu ze względu na dane współczynniki <math>\displaystyle a_j</math> tego wielomianu.  
Pokaż numeryczną poprawność algorytmu Hornera obliczania wartości wielomianu ze względu na dane współczynniki <math>\displaystyle a_j</math> tego wielomianu.  
</div></div>
</div></div>


Linia 109: Linia 108:
<div class="exercise">
<div class="exercise">


Niech dane będą <math>\displaystyle \epsilon>0</math> i funkcja <math>\displaystyle f:[a,b]\toR</math>, która jest nieskończenie wiele razy różniczkowalna i wszystkie jej pochodne są na <math>\displaystyle [a,b]</math> ograniczone przez <math>\displaystyle M</math>. Napisać program znajdujący stopień <math>\displaystyle n</math> oraz współczynniki w bazie Newtona wielomianu <math>\displaystyle w_{f,n}\in\Pi_n</math> interpolacyjnego <math>\displaystyle f</math> z błędem  
Niech dane będą <math>\displaystyle \epsilon>0</math> i funkcja <math>\displaystyle f:[a,b]\toR</math>, która jest nieskończenie wiele razy różniczkowalna i wszystkie jej pochodne są na <math>\displaystyle [a,b]</math> ograniczone przez <math>\displaystyle M</math>. Napisz program znajdujący stopień <math>\displaystyle n</math> oraz współczynniki w bazie Newtona wielomianu <math>\displaystyle w_{f,n}\in\Pi_n</math> interpolacyjnego <math>\displaystyle f</math> z błędem  


<center><math>\displaystyle \|f-w_{f,n}\|_{C([a,b])}\,\le\,\epsilon.
<center><math>\displaystyle \|f-w_{f,n}\|_{C([a,b])}\,\le\,\epsilon.
</math></center>
</math></center>


Rozpatrzyć dwa przypadki: gdy węzły interpolacji są równoodległe, oraz gdy węzły są czebyszewowskie.  
Rozpatrz dwa przypadki: gdy węzły interpolacji są równoodległe, oraz gdy węzły są czebyszewowskie.  
  </div></div>
  </div></div>

Wersja z 15:49, 25 wrz 2006


Ćwiczenia: interpolacja wielomianowa

Ćwiczenie: Wagi wzoru barycentrycznego

Wyprowadź formułę na pierwszy wzór barycentryczny w przypadku n+1 węzłów równoodległych na odcinku [0,1],

wj=(1)nj1hnj!(nj)!.

Wywnioskuj stąd wzór na wagi w drugim wzorze barycentrycznym.

Wskazówka
Rozwiązanie

Ćwiczenie: Implementacja algorytmu barycentrycznego

Zaimplementuj drugi wzór barycentryczny tak, by w efekcie dostać dwie procedury:

  • c = polfitb(x,y) --- wyznaczającą współczynnikic wielomianu interpolującego wartości y w węzłach równoodległych x;
  • Y = polvalb(X,c) --- wyznaczającą w zadanych węzłach X wartości Y wielomianu interpolacyjnego o współczynnikach c.

Oszacuj koszt twojego algorytmu i porównaj z kosztem algorytmu różnic dzielonych (dla współczynników) i algorytmem Hornera (dla wartości) w dwóch przypadkach:

  • kiedy jest dużo węzłów interpolacji, a potrzebna jest tylko jedna wartość wielomianu interpolacyjnego;
  • na odwrót, kiedy jest mało węzłów interpolacji, a potrzeba wyznaczyć bardzo dużo wartości wielomianu interpolacyjnego.
Rozwiązanie

Ćwiczenie: Dodawanie węzła interpolacji

Często w aplikacjach takich jak programy CAD zachodzi potrzeba dodania na bieżąco dodatkowego węzła interpolacji. Podaj, jak to zrobić i jaki to będzie miało koszt, gdy interpolant jest zadany w bazie

  • naturalnej
  • Newtona
  • Lagrange'a
Rozwiązanie

Ćwiczenie: Algorytm Hornera może więcej

Pokaż, że algorytm Hornera obliczania wartości w(ξ) wielomianu danego w postaci potęgowej jest jednocześnie algorytmem dzielenia tego wielomianu przez jednomian (xξ). Dokładniej, jeśli w(x)=j=0najxj to

w(x)=(j=1nvjxj1)(xξ)+v0,

gdzie vj są zdefiniowane tak jak w algorytmie Hornera.

Ćwiczenie: Algorytm Hornera jest numerycznie poprawny

Pokaż numeryczną poprawność algorytmu Hornera obliczania wartości wielomianu ze względu na dane współczynniki aj tego wielomianu.

Ćwiczenie

Niech dane będą ϵ>0 i funkcja Parser nie mógł rozpoznać (nieznana funkcja „\toR”): {\displaystyle \displaystyle f:[a,b]\toR} , która jest nieskończenie wiele razy różniczkowalna i wszystkie jej pochodne są na [a,b] ograniczone przez M. Napisz program znajdujący stopień n oraz współczynniki w bazie Newtona wielomianu wf,nΠn interpolacyjnego f z błędem

fwf,nC([a,b])ϵ.

Rozpatrz dwa przypadki: gdy węzły interpolacji są równoodległe, oraz gdy węzły są czebyszewowskie.