Semestr zimowy 2002/03 - archiwum
Konsultacje: poniedziałek 10-11,
inne terminy ewentulnie i najlepiej wcześniej umówić się
e-mailem: lmarcin at mimuw.edu.pl, pok.1020 (na parterze koło
biblioteki). Należy też sprawdzić: Plan.
Wstęp do informatyki
(I rok matematyki do wykładu Leszka Płaskoty)
Zaliczenie: kolokwium (40pkt) + projekt tzn program w Pascalu (40pkt) -
trzeba zaliczyc program i w sumie miec co najmniej
41 pktów na możliwych do uzyskania 80pktów.
Wyniki kolokwium i zaliczenia projektu:(aktualizowane w miarę na
bieżąco, pdf- mozna odczytac acrobat readerem, przepraszam za brak
polskich liter w nazwiskach)
Projekty (do wyboru): termin ostani lab
- Projekt 1 (wstępny) (dla chętnych, odrobinę trudniejszy
może być napisany w Pascalu,C, lub C++ ), termin : do ostatniego labu
czyli pierwszy albo drugi tydzień stycznia 2003 (
plik pdf )
- Projekt 2: Napisać program a w nim
procedure która dla zadanej liczby naturalnej znajduje jej rozkład na
możliwie małą liczbę kwadratów liczb naturalnych tzn dane jest n,
znadujemy
k i , i=1,..p takie że n=k1*k1 +..k
p *k p . Program ma umożliwić wprowadzenie
n z klawiatury a następnie wypisać na ekran n, p i liczby ki
czyli np 81=9*9 z p=1 a 10=1+9 z p=2- rozkład nie zawsze jest
jednoznaczny. Termin do ostatniego labu (pierwszy albo drugi
tydzień stycznia 2003). W ramach testowania programu zastosować dla np
10000 losowych liczb
naturalnych możliwie dużych - w Pascalu z zakresu longint). Jakie
wychodzi
największe p dla tych losowych liczb? Można tez przetestować np dla
wszystkich liczb od 1000 do 10000 itp (Wsk:
najbardziej prosty
- algorytm to przeszukanie wszystkich możliwych p-tek liczb - no bo
największe p może być n, a największa liczba k i -
część
całkowita z pierwiastka n oznaczmy ją na moment przez k <n
czyli
co najwyżej kn <=n(n/2) możliwości
- oczywiście należy to zmodyfikować aby nie sprawdzać tych
samych liczb k
i po kilka razy czy zaczynać od p=n bo może być że np.
n=81. Tak więc można wykorzystać ten algorytm w możliwie zmodyfikowanej
formie - ale może ktoś wymyśli/znajdzie gdzieś inny algorytm? Trzeba
jednak umieć uzasadnić dlaczego dany algorytm działa - sam fakt że
działa dla jakichś liczb nie wystarcza ).
- Projekt 3: zaimplementować algorytm HeapSort -
sortowania przez kopcowanie dla listy dwuwskaźnkowej. Wczytywać rekordy
z pliku na dysku a następnie posortowane mają być zapisane na dysku w
pliku o
innej ustalonej nazwie. Jako test posortować rekordy z kluczem
typu integer i porządkiem '<=' z kluczami losowymi np. ze zbioru
{-1000,..1000},
niech jeden program je wylosuje np. 20 albo 50 rekordów, i zapisze na
dysk, drugi posortuje HeapSortem a trzeci wczyta z dysku i pokaże na
ekranie, dodatkowo niech podczas sortowania program drugi
(HeapSort) wypisze
klucze najpierw nie uporządkowane (wylosowane), potem wypisze kopiec
(tylko klucze) a na końcu klucze posortowane. (Ponieważ algorytm
HeapSort
jak i lista dwuwskaźnikowa będą/były opisane szczegółowo na
wykładzie
więc wydaje się być ten projekt najłatwiejszym - tylko że od
wprowadzenia
wskaźników do terminu oddania jest mało czasu: realnie ze 2-3 tygodnie
- chyba że ktoś samodzielnie znajdzie potrzebne informacje).
- Projekt 3' Projekt 3 ale HeapSort na tablicy wskaźników do
rekordów - obniżona ilość pktów w stosunku do tego co można
dostać za pozostałe projekty.
Ponieważ co druge zajęcia średnio są w labie więc
będę zamieszczał informację o terminach labów dla obu grup (może
się to zmieniać w miarę potrzeb).
Terminy labów:
Grupa w poniedziałek 8:30-10(Lab 5):14.X, 28.X,(11.XI.2002 - święto -
wolne),18.X|,2.XII,16.XII,13I
Grupa w środę 8:30-10(Lab 5):16.X,23.X(za 9.X),6.XI,20XI,4XII,18XII,
8I(część??),15I
Program labów:
- zmiana hasła, wstępne zapoznanie sie ze środowskiem Turbo Pascala
np 7.0, kompilacja możliwie prostych programów, instrukcje I/O
write,witeln, read,realn, pętla 'For'. Program na sumowanie liczb od 1
do n
dla zadanego n, ewentalnie wszystkich parzystych itp (16.X-pn,14.X-sr)
- Kontynuacja: pętle while, repeat until, program na dzielenie
modulo z wykorzystaniem tylko dodawania liczb calkowitych, program
zapis dowolnej liczby calkowitej binarnie, wykorzystanie tego do
programu na potęge liczby dodatniej a do potęgi k, a>0, k naturalna.
Implementacja programów omówionych na ćwiczeniach tablicowych czy
na wykładzie. (30.X-pn, 23.X-sr)
- Funkcje i procedury, przerobienie części poprzednich programów na
funkcje, parametry wywoływane przez wartość i zmienną. C.D. prostych
algorytmów np dzielenie całkowite x div y kosztem rzędu log2(x/y).
(6XIśr,17XIpon)
- Unit - przyklady , programy rekurencyjne przykłady - wieże Hanoi,
symbol Newtona - wersja rekurencyjna i nierekurencyna, proste
sortowanie np Bubblesort, SelectionSort itd wersja rekurencyjna i nie
rekurencyjna. (20XI-sr,2XII-pon)
- Kontynuacja dla grupy srodowej (4XII-sr).
- Kontynacja programow rekurencyjnych. Obsługa plików - wczytać
rekordy z pliku - posortować np Bubblesort - wypisać do tego samego
albo innego pliku rekordy posortowane wg pola o typie porzadkowym.
Ewentualnie to samo z wczytywaniem/wypisywaniem rekordów do pliku
tekstowego typu text (16.XII-pon,18.XII-sr)
- Ocena projektu zaliczającego. Wskaźniki - implementacja
stosu wskaźnikowa ewen. listy jedno czy dwukierunkowej.(styczeń - drugi
tydzień i być może połowa zajęć w 1 tygodniu zajęć)
Metody Numeryczne: Informatyka
II/III rok, środy 10:15-11:45 sala 3120, czw 12:15-13:45 sala 1030
Zaliczenie: kolokwia - (20k1+21k2=)41pktów, + projekt 7pkt - prosty
program - celem projektu jest bardziej przetestowanie danego algorytmu
a nie pisanie skomplikowanych programów. (Zaliczenie
od 50%* suma pkt z kolokwiów=20pkt).
Projekt - do wyboru choć oczywiście zachęcam do wykonania obu.
Ważne!!! na
stronie Pana Moszyńskiego
znajduje się 'ściągawka' tzn co warto sobie przypomnieć
przed egzaminem.
Warto aby Państwo to przeczytali.
Życzę powodzenia na egzaminie!
Wyniki kolokwiów: - niedostepne.
- Interpolacja Lagrange'a na
dowolnym [a,b] i węzłach dowolnych, przy czym testować w
szczególności dla węzłów równodległych i węzłów Czebyszewa dla funkcji
1/(1+x*x) na odcinku [-5,5] i sin(x) na [0, 2Pi]. Rysować na ekranie
funkcję i wielomian interpolacyjny z węzłami i pktami przecięcia .
(Węzły Czebyszewa to zera n-tego wielomianu Czebyszewa T n
odpowiednio przesunięte i przeskalowane - n-ty wielomian
Czebyszewa na [-1,1] jest zdefiniowany jako Tn(x)=cos(n*arccos(x))
i ma dokładnie n różnych zer : -1<x i<1, które z tego
wzoru od razu dają się policzyć).
- Kwadratura trapezów złożona -czyli
sumowanie wartości
funkcji z wagami: testować funkcje różnej gładkości na [0,1] dla
których całka jest znana np sin(x), wielomiany niskich stopni np 1,2
czy x^p , p=k/2 k=1,2,3,4,5 itd, testować dla h,h/2,h/4,h/8 dla h
= 0.1 (h= 1/N gdzie N - ilość węzłów), porównywać błąd.Tzn obliczać
całkę dla zadanego h i drukować bład między przybliżoną wartością całki
a dokładna całką którą dla funkcji całkowych możemy obliczyć, przy
okazji
można obliczyć i wypisać na ekranie iloraz błędu dla h przez błąd
dla h/2.
Matematyka Obliczeniowa: matematyka II
rok, środa 12:15-13:45 sala 5850
Zaliczeni: 1 kolokwium(33%) + projekt(34%) plus zadawane co 2-3 tyg
proste zadania domowe komputerowe(33%)- sprawdzane za pomocą raportów z
wynikami na 1 stronie co najwyżej formatu A4. Tu będą te programy
i treść projektu umieszczane sukcesywnie. Kolokwium 40pktów, projekt 40
pktów, zadani 40 pktów (5 zadań po 10 pktów, ale suma pktów z 4 zadań
do wyboru) . Zaliczenie od 60pktów. Nie ma kolowium poprawkowego!
Zadania:
- Porównać algorytmy obliczania a*a-b*b = (a-b)*(a+b)
pierwszy: obliczamy a*a i b*b i odejmujemy, drugi:obliczamy a+b i
a-b i mnożymy. Zaprogramować oba i znaleźć takie liczby a,b aby
widać było lepszość jednego z nichw
arytmetyce fl. W raporcie zamieścic te liczby a i b i wyniki obu
algorytmów
w tabelce, wyniki w podwójnej precyzji typu double (w pascalu lub C -
ta
sama nazwa) - (30.X.2002).
- Generować macierze AN=(aij)i,j=1..N
dla N=1..300 o elementach losowych aij z [0,1] i następnie
obliczać normę Frobeniusa ||AN||F .
Raport:wykres tej normy jako funkcji wymiaru tj. F(N)= ||AN||F
. (13.XI.2002) Rozwiązanie: powinna wyjść z małymi
odchyleniami punkty na prostej:( n,n*3 -0.5)
- Dla zadanego wektora u=(u1,...,u400)
T w R400 i ui
=(-1) i dla i=1,..,400, napisać program który
umożliwia dla dowolnego wektora z R400
znalezienie
jego obrazu przy przeksztalceniu Housholdera H=Id - 2w*w
T takim że przekształca u na a* e 1
gdzie a =-||u || 2 a e 1
- wersor. Jako raport podać 3 liczby: normy ||H|| p dla p=1
i nieskończoność i normę drugą He3 (wektora który
jest obrazem wersora e 3 przy przekształceniu H).
Wszystko wykonać w arytmetyce double. Napisać jak państwo poradzili
sobie z umieszczeniem w pamieci H - tj. jak państwo
zaimplementowali H - krótko w kilku zdaniach. (11.XII.2002)
- Dla macierzy A= (k1k2)
,wymiaru 4x2 o pierwszej kolumnie, k1=(1,1,1,1)T
i drugiej k2=(0,1,2,3)T napisać
program rozwiazujacy L.Z.N.K. (||Ax-f||2=min||A
y -f|| 2) z prawą strona f=(f0,f1,f2,f3)
T dla fi - czterech losowych liczb z odcinka [0,1].
Ponieważ rozwiązanie to x =(x1,x2) T to jako raport
narysować wykres x1+x2*t na odcinku [-1,4] zaznaczając równocześnie
pkty (i,fi), i=0,1,2,3. Proszę zauważyć, że powyższe L.Z.N.K. daje nam
wzór na prostą taką że mamy możliwie najmniejsze |x1+x2*0
-f0|2 + ...+
|x1+x2*3 -f3|2 czyli ta prosta będzie przechodziła 'możliwie
blisko ' pktów (i,fi), i=0,1,2,3. (18.XII.2002)
- Napisać program który oblicza wielomian interpolujący zadaną
funkcję f w 2 punktach: 0 i 1 z podwójną krotnością w 0 i
pojedyńczą w 1, tzn tak żę wielomian w który otrzymamy spełnia w
(i)= f(i), i=0,1; i w'(0)=f'
(0) . Jako raport: na jednym obrazie wykres sin(4*x) i
w dla tej funkcji na odcinku [-1,2] (y w zakresie [-2,2]).
Zaznaczyć który wykres jest wiel. interp. a który funkcji.
(15.I.2003 - ostatnie zajęcia)
Przepraszam za zmiane, jak ktoś zrobił problem 4 zanim przesunąłem
terminy może go awansem oddać oczywiście wcześniej.
Projekt (do wyboru): (trudność chyba nie jest
jednakowa choć wszystkie trzy nie są trudne programistycznie)
- Napisać program na algorytm eliminacji Gaussa bez wyboru
elementu głównego dla rozwiązywania układu równań liniowych
Ax = b z macierzą n x n symetryczna dodatnio
określoną (dostajemy wersję metody Choleskiego) - skorzystać z
symetryczności, dostajemy prawie o połowę mniej obliczeń (de facto
rozkładamy A=L T DL ) gdzie L
dolnotrójkątna z 1 na diagonali, D diagonalna z wartościami dodatnimi
na diagonali, LT - transpozycja L )Testować
dla prawych stron otrzymanych z mnożenia zadanego znanego wektora przez
macierz A, a nastepnie
drukowac bład względny między rozwiązaniem przybliżonym a dokładnym
w normie 2 i bład residualny w tejże. Macierze do testowania albo
należy
wczytywać z pliku albo podawać z klawiatury ewentualnie wzorem.
Przykład
takiej macierzy na którym proszę testować: macierz Hilberta
a[i+1,j+1]=1/(1+i+j), i,j=0,..,n-1,zauważmy że a[i,j]= calka xi
*xj na [0,1] stąd to macierz symetryczna (co od razu widać)
i dodatnio określona (dlaczego?) inny przykład macierz A=(n+2)I+ L
+ L T gdzie I - macierz identyczności, n -
wymiar, L -macierz dolnotrójkątna o losowych wartościach z
przedziału [-1,1], LT - transponowana do L
(skąd
wiemy że macierz A dodatnio określona?) . Testować
dla takich
prawych stron dla których znam dokładne rozwiązanie tzn dany wektor
y (wylosowane współrzędne), obliczamy b =A y
i rozwiązujemy naszym algorytmem układ A x = b.
Po rozwiązaniu drukować na ekranie błąd względny || x-y ||/||x
|| i residualny || A x -b ||/(|| A ||*||x||)
dla normy drugiej
wektorów i || A || - norma Frobeniusa macierzy.
- Interpolacja Lagrange'a: opis jak testować powyżej.
- Napisać program który oblicza całkę z danej funkcji
na zadanym odcinku wykorzystując wartości tej funkcji w
pktach tak aby błąd między obliczoną przybliżoną wartościa był na
określonym z góry poziomie - błąd ma być określony z klawiatury w
ostateczności w kodzie programu. Możemy przyjąć że znamy
oszacowanie modułu drugiej pochodnej na tym odcinku - i dla takowych
funkcji testować np. sin(x), cos(x), x^p, wielomiany różnych stopni itp
W szczególności dla pewnych odcinków możemy policzyć dokładne wartości
tych całek więc możemy sprawdzić w tych przypadkach czy rzeczywiśćie
algorytm działa jak założyliśmy. Testowanie: dla funcji o
znanych całkach i oszacowaniach drugiej pochodnej
dla danych odcinków zastosować algorytm i następnie drukować bład
sprawdzając czy rzeczywiście otrzymaliśmy zadaną dokładność. Wskazówka
: Metody liczenia całek - porównaj treść powyżej
- można też oczywiście użyć innej metody.
Powrót do mojej strony domowej
Strona ostatnio uaktualniona - 15 stycznia 2003.