Programowanie funkcyjne/Procedury wyższych rzędów/Ćwiczenia: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Kubica (dyskusja | edycje)
 
(Nie pokazano 3 wersji utworzonych przez jednego użytkownika)
Linia 13: Linia 13:
}}
}}


{{cwiczenie|[]||
{{cwiczenie|[Przybliżanie zer przez bisekcję]||
Zaimplementuj przybliżanie zer funkcji przez bisekcję.  
Zaimplementuj przybliżanie zer funkcji przez bisekcję.  
Parametrami powinny być:  
Parametrami powinny być:  
Linia 22: Linia 22:


== Laboratorium ==
== Laboratorium ==
{{cwiczenie|[Szereg Taylora]||
Zaimplementuj aproksymację funkcji za pomocą szeregu Taylora.
Twoja procedura powinna mieć następujące parametry: liczbę sumowanych wyrazów szeregu, punkt, w którym badana jest przybliżana funkcja.
Wynikiem powinno być przybliżenie funkcji.
Zastosuj przybliżenie pochodnej oraz sumy częściowe szeregów, przedstawione na wykładzie.
}}
{{rozwiazanie|nieefektywne, ale proste||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> <div class="mw-collapsible-content" style="display:none">
'''let''' potega x n = iterate n ('''fun''' a -> a *. x) 1.0;;
''val potega : float -> int -> float = <fun>''
'''let''' wyraz f x0 x n =
  iterate (n-1) pochodna f x0 /. float (silnia (n-1)) *. potega (x -. x0) (n - 1);;
''val wyraz : (float -> float) -> float -> float -> int -> float = <fun>''
'''let''' taylor f x0 n x = szereg (wyraz f x0 x) n;;
''val taylor : (float -> float) -> float -> int -> float -> float = <fun>''
</div></div>}}
{{cwiczenie|[Odwrotność funkcji]||}}
{{cwiczenie|[Odwrotność funkcji]||}}
Niech <math>f : \mathcal{R} \to \mathcal{R}</math> będzie funkcją 1-1 i "na" oraz taką, że <math>f(0) = 0</math>,  
Niech <math>f : \mathcal{R} \to \mathcal{R}</math> będzie funkcją 1-1 i "na" oraz taką, że <math>f(0) = 0</math>,  
Linia 56: Linia 37:
Uwaga: W jaki sposób wagi zależą od <math>n</math>?
Uwaga: W jaki sposób wagi zależą od <math>n</math>?
}}
}}
<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">
Uśrednienie funkcji <math>f</math> z wagą <math>a</math> możemy zdefiniować następująco:
  '''let''' usrednij a f x = a *. (f x) +. (1. -. a) *. x;;
  ''val usrednij : float -> (float -> float) -> float -> float = <fun>''
Żeby iterowanie przekształcenia <math>y \to \frac{x}{y^{n-1}}</math> było zbieżne do jego punktu stałego, musimy je uśrednić ze współczynnikiem mniejszym od <math>\frac{2}{n}</math>, np. <math>\frac{2}{n+1}</math>.
  '''let''' root n x =
    punkt_staly (usrednij (2. /. float(n+1)) (fun y -> x /. potega y (n-1))) 1.;;
</div></div>

Aktualna wersja na dzień 13:58, 1 cze 2020

Praca domowa

  • Wygładzenie funkcji z odstępem dx polega na uśrednieniu f(xdx), f(x) i f(x+dx). Napisz procedurę wygładzającą daną funkcję z zadanym odstępem.
  • Jaki typ ma procedura compose zastosowana w wyrażeniu:
compose twice twice;;

Ćwiczenia

Ćwiczenie [Semantyka wyrażeń]

Przypomnij sobie zadanie dotyczące wyliczania wartości wyrażeń. Rozszerz składnię wyrażeń o zmienne. Procedura obliczająca wartość wyrażenia będzie wymagać dodatkowego parametru -- wartościowania zmiennych, czyli procedury, która nazwie zmiennej przyporządkowuje jej wartość.

Ćwiczenie [Przybliżanie zer przez bisekcję]

Zaimplementuj przybliżanie zer funkcji przez bisekcję. Parametrami powinny być:

  • funkcja f, której zer szukamy,
  • dwa punkty, w których funkcja przyjmuje wartości przeciwnych znaków,
  • precyzja poszukiwać, tzn. taki ε, że jeżeli wynik x spełnia |f x|ε, to jest dobrym przybliżeniem zera.

Laboratorium

Ćwiczenie [Odwrotność funkcji]

Niech f: będzie funkcją 1-1 i "na" oraz taką, że f(0)=0, f jest rosnąca i |f(x)||x|. Zaimplementuj procedurę odwrotnosc, której wynikiem dla parametru f będzie przybliżenie f1 z dokładnością zadaną przez stałą epsilon (czyli jeśli g = odwrotnosc f, to x |g(x)f1(x)|epsilon).


Ćwiczenie [Pierwiastkowanie jako punkt stały [AS] ]

Przedstawione w wykładzie tłumienie przez uśrednianie opiera się na średniej arytmetycznej. Czasami zamiast średniej arytmetycznej należy użyć średniej ważonej, z odpowiednio dobraną wagą. Punktem stałym funkcji yxyn1 jest xn. Zaimplementuj obliczanie n-tego pierwiastka z x za pomocą obliczania punktu stałego i tłumienia przez uśrednianie z odpowiednimi wagami. Uwaga: W jaki sposób wagi zależą od n?

Rozwiązanie