Postanowiłem trochę ruszyć się tutaj i po długiej nieobecności dodaje kolejny wpis:), a więc od razu przechodząc do sedna, udostępniam kod wykorzystujący metodę Simpsona mojego autorstwa. Jest o tyle fajny że wypisuje wszystkie czynności które wykonuje. Algorytm 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 (n=4):
Spójrz na linie 18 kodu
#include <cstdlib>
#include <iostream>
#include <iomanip>
#include <cmath>
/*
http://www.darksmark.pl
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;
}
Poniżej widzimy przebieg działania programu:
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
Przeglądając stare serwery ftp znalazłem bardzo prosty licznik pobrań działający na plikach tekstowych. Napisałem go (i działał do tej pory bez zarzutów) dokładnie 4 lata temu (cóż za zbieg okoliczności!). Może się komuś przyda 


Prostym sposobem lecz niestety łatwo odwracalnym na ukrycie kawałka kodu php, jest użycie funkcji
Właśnie dzisiaj w nocy po automatycznej aktualizacji kilku plików (Ubuntu 11.04), moje Chromium odmówiło posłuszeństwa. Przy uruchamianiu wyświetla komunikat „Nie można poprawnie otworzyć profilu. Niektóre funkcje mogą być niedostępne. Sprawdź, czy profil istnieje oraz czy masz uprawnienia do odczytu i zapisu jego zawartości.” Pierwsze co to wydałem polecenie ls -la .config/chromium/ i zobaczyłem że prawa dostępu do plików są raczej w porządku drwx—— 5 smark smark 4096 2011-09-23 00:29 . Rozwiązałem problem tworząc całkiem nowy profil z ustawieniami przeglądarki. Udałem się do Miejsca -> Katalog domowy, z górnej belki wybrałem Widok -> Wyświetlanie ukrytych plików, przeszedłem do katalogu .config, zmieniłem nazwę folderu chromium na chromium_kopia i uruchomiłem ponownie moją przeglądarkę. W podanej lokalizacji utworzył się automatycznie nowy profil (katalog) o nazwie chromium. Teraz skopiowałem plik ze starymi zakładkami z katalogu chromium_kopia/Default/Bookmarks do nowo utworzonego chromium/Default i teraz znowu cieszę się moją ukochaną przeglądarką