poniedziałek, 9 stycznia 2012

Numeryczne obliczanie miejsc zerowych

Wykonałem program, który oblicza miejsca zerowe funkcji za pomocą trzech najbardziej popularnych metod numerycznych. Miejsce zerowe funkcji to inaczej pierwiastek tej funkcji, albo argument dla którego wartość funkcji jest równa zero. Czyli f(x) = 0. Nie zawsze jest łatwe obliczenie dokładne miejsca zerowego. Dlatego z pomocą przychodzą metody numeryczne, które pozwalają wyznaczać miejsca zerowe w przybliżeniu, wręcz z żądaną dokładnością.

Program, który napisałem wykorzystuje trzy sposoby:
  1. Metodę bisekcji
  2. Metodę Newtona
  3. Metodę siecznych
Pierwsza z nich jest bardzo intuicyjna, a wykorzystuje ona własność Darboux. Zakładamy, że funkcja jest ciągła. Jeśli w punkcie A wartość funkcji jest ujemna w punkcie B wartość jest dodatnia. To znaczy, że po drodze funkcja osiąga wartość 0, czyli znajduje się tam miejsce zerowe. W tej metodzie:
  • Bierzemy przedział [A, B]
  • Przecinamy go w połowie w punkcie C
  • Mamy teraz dwa przedziały [A, C] i [C, B] 
  • Wybieramy ten którego krańce mają przeciwne znaki
  • Powtarzamy aż f(C) = 0

Metoda Newtona albo inaczej metoda stycznych. W tej metodzie korzystamy z pochodnych a kolejne przybliżenia miejsca zerowego obliczamy za pomocą wzoru:
Jest ona szybsza niż metoda bisekcji, jednak jej wadą jest to że nie zawsze za jej pomocą da się obliczyć miejsce zerowe. A w przypadku zbyt dalekiego wybrania punktu początkowego może wręcz zacząć oddalać się od miejsca zerowego.

Metoda siecznych jest o tyle wygodna, że nie wymaga liczenie pochodnych (co czasem może być pracochłonne), a jedynie dwu punktów początkowych za pomocą których przeprowadzimy sieczną. Ta metoda działa podobnie jak metoda stycznych. Kolejne sieczne również przybliżają się do miejsca zerowego.

Program został napisany w języku C++. Tutaj działa pod Linuksem, jednak jest przenośny i może być uruchomiony na Windowsie czy Macu.






wtorek, 13 grudnia 2011

Problem pięciu filozofów

Problem ucztujących filozofów jest jednym z klasycznych zagadnień programowania współbieżnego dotyczącego zagadnienia synchronizacji procesów. Został on wymyślony przez E. Dijkstra w 1965 roku. Wymyślił on zadanie dotyczące sytuacji, w której 5 komputerów chce uzyskać dostęp do 5 współdzielonych dysków. Niedługo potem, problem został przedstawiony na nowo przez T. Hoare jako problem ucztujących filozofów.

Pięciu filozofów jest przy stole i wykonują jedną z dwóch czynności – albo jedzą, albo rozmyślają. Stół jest okrągły, przed każdym z filozofów jest się miska ze spaghetti (albo ryżem, albo czymkolwiek), a pomiędzy każdą sąsiadującą parą filozofów leży widelec (ewentualnie pałeczka do ryżu, w zależności od wersji). Także każdy ma przy sobie dwie sztuki - po swojej lewej i prawej stronie. Ponieważ jedzenie potrawy jest trudne przy użyciu jednego widelca, zakłada się, że każdy filozof korzysta z dwóch. 



Zrealizowana aplikacja składa się tak naprawdę z dwóch programów napisanych w języku C. Jeden główny, który inicjuje semafory w pamięci dzielonej oraz uruchamia osobne procesy dla każdego z filozofów. Procesy komunikują się ze sobą za pomocą semaforów w pamięci współdzielonej z wykorzystaniem bibliotek sys/sem.h oraz sys/shm.h



poniedziałek, 21 listopada 2011

Zbiór Mandelbrota

Zbiór Mandelbrota to podzbiór płaszczyzny zespolonej, którego brzeg jest jednym ze sławniejszych fraktali. Może to Tobie niewiele mówić jednak ten obraz podoba się wielu osobom. To właśnie przybliżony obraz tego zbioru.


Program generuje właśnie taki obrazek. Do tego działa w wersji konsolowej i na konsoli również tworzy ten zbiór. Napisany w C++ z użyciem STLa.

środa, 9 listopada 2011

Magiczne kwadrat i kalkulator

Aktualnie sporo się dzieje. Rok akademicki już dobrze w połowie, nadchodzą kolokwia, zaliczenia i projekty, zatem ja również mam sporo pracy :) Ostatnio zrealizowane projekty dotyczyły głównie algorytmów. Stworzyłem m. in.:

  • Program obliczający kwadraty magiczne,
  • Kalkulator uwzględniający priorytety działań.



Oba programy są napisane w ANSI C.

niedziela, 16 października 2011

System plagiatowy

Znacie plagiat.pl? Ostatnio pracowałem właśnie nad takim ciekawym projekt. Funkcjonalność jego to:

  • upload (wgrywanie) plików do bazy danych,
  • porównywanie wgranych plików z bazą danych,
  • wyświetlanie raportu w procentach,
  • możliwość konfiguracji porównywania (długość fraz, znaki interpunkcyjne, duże małe znaki),
  • konwersja z PDFa, Worda, HTML, RTF, TXT.
Projekt został napisany w PHP, MySQL z użyciem frameworka symfony.

sobota, 17 września 2011

Pisanie programów na zaliczenie

Piszę programy dla studentów na zaliczenie zajęć. Używam następujących technologii: PHP, MySQL, HTML, CSS, Python, Visual Basic for Application, C, C++, Java, Pascal. Oferuję pomoc przy projektach.

Kontakt
Mail: programowanie.na.zaliczenie@gmail.com
Telefon: 663 53 83 63