Dzisiaj wpis gościnny dla hardkorów. Wpis pochodzi z bloga który już nie istnieje (2002 rok) i nie dotyczy hackingu lecz bardziej algorytmiki, matematyki, informatyki i programowania w języku C++ (Simpson Method, Simpson’s rule C++). Zostaje dodany tylko i wyłącznie dlatego, że szkoda marnować czyjąś prace a może się w przyszłości komuś przyda. Dotyczy metody Simpsona (całki oznaczone), algorytm został napisany w C++ i dotyczy problemu obliczania całek oznaczonych w C++. Algorytm jest o tyle fajny że wypisuje wszystkie czynności które wykonuje. Program napisany jest w języku C++. Należy pamiętać o modyfikacji 18 linii kodu (wrzucamy tam swoją funkcję), poniższy przykład kodu w C++ jest zbudowany dla całki z parametrem n=4:
Metoda Simpsona C++ – całka oznaczona funkcji rzeczywistej:
#include <cstdlib> #include <iostream> #include <iomanip> #include <cmath> /* Metoda Simpsona - C++ */ using namespace std; // tutaj umieszczamy nasza funkcje z całki! double f(double x) { return (1/sqrt(5*x-2)); } double Xp, Xk; double dx; int N; double x; double st, s; int main(int argc, char *argv[]) { cout << "Podaj poczatek przedzialu calkowania: "; cin >> Xp; cout << "Podaj koniec przedzialu calkowania: "; cin >> Xk; cout << "Podaj N: "; cin >> N; cout << endl << "------------------------------" << endl << endl; cout << "Xp=" << Xp << ", Xk=" << Xk << ", N=" << N << endl; cout << "s=0, st=0" << endl << endl; dx=(Xk-Xp)/N; cout << "dx=(Xk-Xp)/N" << endl; cout << "dx=("<< Xk << "-" << Xp << ")/" << N <<endl; dx=(Xk-Xp)/N; cout << "dx=" << dx <<endl<<endl; for (int i=1; i<=N; i++) { cout << endl << endl <<"\tIteracja nr: " << i << endl << endl; cout << "x=xp+i*dx"<< endl; cout << "x=" << Xp << "+" << i << "*" << dx << endl; x=Xp+i*dx; cout << "x=" << x <<endl<<endl; cout << "st=st+f(x-dx/2)" << endl; cout << "st=" << st << "+f(" << x << "-(" << dx << "/2)" << endl; st=st+f(x-(dx/2)); cout << "st=" << st << endl << endl; if (i<N) { cout << " interacyjne i mniejsze od N to licze:" << endl; cout << " s=s+f(x)" << endl; cout << " s=" << s << "+f(" << x << ")"; s=s+f(x); cout << "s=" << s << endl; } } cout << endl << endl << "--------Wynikowe liczenie:--------" << endl; cout << "s=dx/6*(f(Xp)+f(Xk)+2*s+4*st)" << endl; cout << "s=" << dx << "/6*(f(" << Xp << ")+f(" << Xk << ")+2*" << s << "+4*" << st << endl; s=dx/6*(f(Xp)+f(Xk)+2*s+4*st); cout << "s=" << s << endl; cout << endl << "wynik: " << s; cout << endl; getchar(); getchar(); return EXIT_SUCCESS; }
Przebieg algorytmu metody Simpsona:
Poniżej zostało pokazanie działanie powyższego kodu źródłowego (implementacja w C++), jak widzicie obliczanie całki oznaczonej nie jest trudne:
Podaj poczatek przedzialu calkowania: 0.5 Podaj koniec przedzialu calkowania: 1.5 Podaj N: 4 ------------------------------ Xp=0.5, Xk=1.5, N=4 s=0, st=0 dx=(Xk-Xp)/N dx=(1.5-0.5)/4 dx=0.25 Iteracja nr: 1 x=xp+i*dx x=0.5+1*0.25 x=0.75 st=st+f(x-dx/2) st=0+f(0.75-(0.25/2) st=0.942809 interacyjne i mniejsze od N to licze: s=s+f(x) s=0+f(0.75)s=0.755929 Iteracja nr: 2 x=xp+i*dx x=0.5+2*0.25 x=1 st=st+f(x-dx/2) st=0.942809+f(1-(0.25/2) st=1.59169 interacyjne i mniejsze od N to licze: s=s+f(x) s=0.755929+f(1)s=1.33328 Iteracja nr: 3 x=xp+i*dx x=0.5+3*0.25 x=1.25 st=st+f(x-dx/2) st=1.59169+f(1.25-(0.25/2) st=2.11692 interacyjne i mniejsze od N to licze: s=s+f(x) s=1.33328+f(1.25)s=1.81835 Iteracja nr: 4 x=xp+i*dx x=0.5+4*0.25 x=1.5 st=st+f(x-dx/2) st=2.11692+f(1.5-(0.25/2) st=2.56983 --------Wynikowe liczenie:-------- s=dx/6*(f(Xp)+f(Xk)+2*s+4*st) s=0.25/6*(f(0.5)+f(1.5)+2*1.81835+4*2.56983 s=0.656527 wynik: 0.656527
Jeśli szukałeś programu liczącego całki oznaczone to dobrze trafiłeś, jeśli szukałeś metody simpsona też dobrze trafiłeś… ale jeśli jesteś tu przypadkiem…… zajrzyj do pozostałych naszych wpisów na blogu hakiersim. Może Cię zainteresuje:
- Jak chronić konto internetowe (również bankowe) przed Phishingiem
- Jak włamać się na FB?
- Polub nasz fanpage na Fejsbuku teraz TUTAJ
TO już koniec wpisu! Pozdrawiamy! 🙂
Mam pytanie. Od jakiego języka programowania zaczynać ? Lepiej jakiś prosty. Próbowałem uczyć się C++ ale dla mnie to czarna magia.
Wszystko zależy co Cię interesuje i co chcesz robić, bo różne języki nadają się do różnych zastosowań (niektóre po prostu wiele ułatwiają).
A czy jest jakiś uniwersalny język przez który poznam podstawy.
Podstawy programowania można zacząć od każdego języka. Kiedyś w szkołach i uczelniach wyższych uczyli na Pascalu (Turbo Pascal, Object Pascal, Delphi). Według mnie PHP jest dosyć łatwym językiem.
Do czego można użyc się ten algorytm, albo czy da sie nim łamac zabezpieczenia??
Przyznaje że nie znam języka C++, ale jestem ciekawy 🙂
Bardziej to matematyki nie znasz niż programowania. 🙂 http://pl.wikipedia.org/wiki/Metoda_Simpsona
A python na początek ?
Btw. Macie może wiecej linków z numeryki/metod obliczeniowych (matlab/octave) ?
Python jest świetny do wszystkiego, w kilku liniach można bardzo Ciekawe rzeczy wykombinować (mnogość modułów)… Do obliczeń też jest świetny.
Niestety nie mamy więcej materiałów naszych z metod numerycznych (chyba tylko 2-3 wpisy na naszym blogu tutaj), wrzuciliśmy ten wpis, ponieważ strona jednego z autorów tych wpisów na haker.edu.pl już dawno nie istnieje więc po co mają się wpisiki się marnować (nigdzie nie są opublikowane obecnie).