Narzędzia użytkownika

Narzędzia witryny


cw-6-rekurencja

====== Różnice ====== Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

cw-6-rekurencja [2013/10/28 17:11]
127.0.0.1 edycja zewnętrzna
cw-6-rekurencja [2018/10/26 12:54] (aktualna)
miller [Funkcja obliczająca dwie wartości - przykład 2.]
Linia 1: Linia 1:
-==== Całka oznaczona ==== +==== Wskaźniki: definiowanie, operator & i dereferencji * ====
  
 +Należy w programie zdefiniować zmienne ''a'', ''b'' i ''x'' oraz dwie zmienne typu wskaźnikowego. Zmiennym ''a'' i ''b'' należy nadać przykładowe wartości początkowe. Do zmiennych wskaźnikowych należy podstawić adresy zmiennych ''a'' i ''b''. 
 +Do zmiennej ''x'' należy podstawić sumę wartości pamiętanych w ''a'' i ''b'', ale przy obliczaniu tej sumy nie należy używać nazw  ''a'' i ''b''.
  
-Numeryczne obliczanie (prymitywnymi metodami) całki oznaczonej - (dla osób, które z tym pojęciem się nie spotkały: pola pod wykresem funkcji). +==== Funkcja obliczająca dwie wartości ====
-      +
- === Wersja podstawowa ===+
  
 +W funkcji ''main'' definiujemy cztery zmienne typu ''double''. W dwóch z nich zapisujemy część rzeczywistą i urojoną liczby zespolonej. Wywołujemy funkcję, która oblicza moduł i argument tej liczby. Te wyniki zapisuje do pozostałych dwóch zmiennych zdefiniowanych w funkcji głównej. Po powrocie do ''main'' obliczone wartości są wyprowadzone na ekran. 
  
-Algorytm obliczania wartości funkcji całkowanej (dowolnej) zapisujemy w osobnym segmencie (funkcji w znaczeniu fragmentu programu).+==== Funkcja obliczająca dwie wartości - przykład 2====
  
-W segmencie głównym program wczytuje przedział całkowania (dolną //a// górną //b// granicę pola pod wykresem) oraz +Każdy dzień w roku można wskazać podając jego numer w roku albo jego numer w miesiącu numer tego miesiąca, np. 35 albo 4,2. Dla uproszczenia można przyjąć, że rok nie jest przestępny. Program w funkcji ''main'' wczytuje numer dnia w roku, a następnie wywołuje funkcję, która oblicza odpowiadający mu numer miesiąca i numer dnia tego miesiąca. Obliczoną datę wyprowadza na ekran funkcja ''main''.
-na ile podprzedziałów dzielimy cały przedział (długość tego podprzedziału oznaczmy przez //h//).+
  
-W każdym podprzedziale (od //x<sub>i</sub>// do// x<sub>i+1</sub>//)  obliczamy pole "elementarne" wg jednego z wzorów: +==== Rekurencja - obliczanie silni ====
-  * prostokątów w przód: //p<sub>i</sub> h f(x<sub>i</sub>)//, +
-  * prostokątów w tył: //p<sub>i</sub> h f(x<sub>i+1</sub>)//, +
-  * prostokątów punktu środkowego: //p<sub>i</sub> h f(x<sub>i</sub>/2+x<sub>i+1</sub>/2) //, +
-  * trapezów: //p<sub>i</sub> h (f(x<sub>i</sub>)+f(x<sub>i+1</sub>))/2 //, +
-  * Simpsona: //p<sub>i</sub> h (f(x<sub>i</sub>) + 4f(x<sub>i</sub>/2+x<sub>i+1</sub>/2) + f(x<sub>i+1</sub>))/6 //.+
  
-Należy wybrać jedną z metod.+Proszę napisać 2 wersje programu obliczającego wartość silni zadanej liczby: 
 +  * wykorzystaniem iteracji w pętli, 
 +  * z użyciem funkcji wywoływanej rekurencyjnie
  
-Przybliżenie całki jest sumą wszystkich pól //p<sub>i</sub>//. 
  
-=== Wersja rozszerzona: ===+==== Rekurencja - adaptacyjny algorytm obliczania całki oznaczonej metodą Simpsona ==== 
  
-Zadajemy wielkość "dopuszczalnego" błędu. Program powtarza obliczenia dla kroku //h///2 i porównuje wyniki dla //h// i //h///2. Jeżeli różnica wyników jest większa niż ąd dopuszczalnyto ponawia połowienie kroku.+**Pojęcie całki oznaczonej** funkcji w przedziale od ''a'' do ''b'' zastąpimy - dla uproszczenia - polem powierzchni ograniczonej osią odciętych, wykresem ''x=a'', wykresem ''x=b'' oraz wykresem funkcji (załóżmyże funkcja przyjmuje wartości dodatnie).
  
-**UWAGA:**+**Metoda Simpsona** pozwala obliczyć przybliżoną wartość ww. pola.  
 +Przepis: 
 +   S = h*(f(a) + 4*f(a/2+b/2) + f(b))/6,   h - długość przedziału całkowania = b-a   
 +Obliczone ''S'' nie jest dokładną wartością pola - tylko jej przybliżeniem - ale błąd przybliżenia jest mały jeżeli ''h'' jest małe.
  
-Takich algorytmów obliczania całki oznaczonej nie należy stosować praktyce obliczeniowej są metody znacznie lepszektóre tyle samo licząc osiągają zdecydowanie lepszą dokładność (npGaussaNewtona-Cotesa wyższych rzędówRomberga itp.).+**Algorytm adaptacyjny** ma na celu osiągnięcie wyniku (pola) z błędem nie większym niż zadany = ''Delta''.  
 + 
 +  * W tym celu stosujemy przepis Simpsona dla całego przedziału od ''a'' do ''b''.  
 +  * Następnie dzielimy ten przedział na 2 połowy. Oznaczmy punkt połowie przedziału jako ''c''.  
 +  * Wzór Simpsona stosujemy teraz osobno dla lewej połówki (od ''a'' do ''c'') i dla prawej (od ''c'' do ''b''). 
 +  * Otrzymujemy przybliżone wartości dwóch części obliczanego pola np. ''S1'' i ''S2''. 
 +  *  Jeżeli suma ''S1'' i ''S2'' różni się od ''S'' nie więcej niż o ''Delta'', to uznajemy, że otrzymany wynik jest dostatecznie dokładny i kończymy algorytm.  
 +  * W przeciwnym przypadku stajemy przed dwoma zadaniami obliczyć pole każdej połówki (leweja później prawej), każdej z błędem nie większym niż ''Delta/2''.  
 +  * Zauważmy, że są to jakościowo dokładnie dwa takie same zadania, jak zadanie pierwotne (obliczyć pole z błędem nie większym niż ''Delta'')!   
 + 
 + 
 + === Do napisania: Wersja podstawowa === 
 + 
 +W programie jest funkcja, która oblicza wartości funkcji podcałkowej (funkcji określającej wykres ograniczający pole, którego powierzchnia będzie obliczana) 
 +W funkcji ''main'' program: 
 +  * wczytuje granice przedziału całkowania i maksymalny błąd, 
 +  * wywołuje funkcję, która rekurencyjnie oblicza pole, 
 +  * wyprowadza na ekran powierzchnię obliczonego pola 
 + 
 +=== Wersje rozszerzone === 
 + 
 +  * Należy tak napisać program, aby liczba obliczeń wartości zadanej funkcji była jak najmniejsza.  
 +  * Program wyprowadza wartości zmiennej niezależnej ''x'' (od najmniejszej do największej), w których obliczana była zadana funkcja.
  
  
cw-6-rekurencja.1382976680.txt.gz · ostatnio zmienione: 2014/11/03 14:29 (edycja zewnętrzna)