Wymiar fraktalny.

Liczenie wymiaru fraktalnego obiektu, który nie ma objętości (np. łańcucha SAW, linii brzegowej morza, figury Kocha) najłatwiej wykonać tzw. metodą pudełkową. Polega ona na tworzeniu coraz mniejszych pudełek i liczeniu pudełek zawierających fragmenty obiektu.

Najpierw tworzymy jedno duże pudełko, które obejmuje cały obiekt (w naszym przypadku wszystkie cząsteczki). Weźmy na przykład pudełko o dł. boku L=18. Takich pudełek zawierających cząsteczki jest N=1. Następnie dzielimy bok pudełka na dwa (zawsze zaokrąglamy w górę) i teraz L=9, teraz mamy N=4 pudełka zawierające cząsteczki. kolejne kroki:
L=5   N=13   ;   L=3   N=24
L=2   N=41   ;   L=1   N=100

Najnowszy screenshot

Następnie logarytmujemy L i N i tworzymy wykres f(x), gdzie x = log(L), y = log(N). Nachylenie prostej aproksymowanej do otrzymanego wykresu odpowiada wymiarowi fraktalnemu obiektu.

Trudność w liczeniu wymiaru fraktalnego sprowadza się głównie do "chodzenia" po poszczególnych pudełkach i sprawdzania czy jest w nich jakakolwiek cząstka. Taką przykładową pętlę przedstawiam poniżej.
minX,minY,maxX,maxY - graniczne wartości położeń cząstek na płaszczyźnie (tak żeby można było określić główny kwadrat (największy) od którego zaczynamy)
l - krawędź tego głównego kwadratu (w przykładzie powyżej oznaczone to jest jako L)
n - ilość pudełek w których jest jakakolwiek cząstka
skala - w moim programie cząstki mają położenia xy niezależnie od tego co jest wyświetlane na ekranie; na ekranie ich położenia są mnożone przez skale siatki - w sumie to jest nieważne dla samego algorytmu liczenia wymiaru
tabL - iksy naszego wykresu
tabN - igreki naszego wykresu

if ((maxX-minX)< (maxY-minY)) l = maxY-minY+1;
       
else l = maxX-minX+1;
       
       
while (l>=1) {
          
n=0;

          
for (curX = minX; curX <= maxX; curX=curX+l) {
            
for (curY = minY; curY <= maxY; curY=curY+l) {       
            
iter = this.moleculesList.listIterator ();
            
while (iter.hasNext ()) {
              
curMolecule = (DrawableMolecule) iter.next ();
              
if (curMolecule.isInBox (curX,curY,l,skala)) {
                
n=n+1;
                
break;
              
}
             }
           }
           }
             tabL.add (Math.log10 (l));
             tabN.add
(Math.log10 (n));
            
if (l==1) l=0;
             l=
(int) Math.ceil (l/2f);
       
}
       
return tab;

Sprawdzenie czy cząstka jest w pudełku (sprawdzam położenia cząstek pomnożone przez skale, równie dobrze można nie mnożyć):

/**
   * Sprawdzamy czy cząsteczka jest w pudełku
   *
@param curX - wspolrzedna x lewego gornego rogu pudełka
   *
@param curY - współrzędna y lewego górnego rogu pudełka
   *
@param l - długość krawędzi pudełka
   *
@param skala - skala siatki
   *
@return Czy cząsteczka jest w pudełku?
   */
 
public boolean isInBox (int curX, int curY, int l, float skala) {
   
return (this.getX (skala) > ((curX*skala) - (skala/2)))
   
&& (this.getX (skala) < (((curX+l) *skala) - (skala/2)))
   
&& (this.getY (skala) > ((curY*skala) - (skala/2)))
   
&& (this.getY (skala) < (((curY+l) *skala) - (skala/2))) ;
 
}

Ta ostatnia metoda jest włożona do obiektu cząsteczka więc this.getX itp. określają położenie cząsteczki.

Posted on Thu, 16 Dec 2004 01:03 by leeloo (1350 day(s) old) Trackbacks [11109]

Prawdopodobieństwo Boltzmannowskie.

Rozkład Boltzmanna wyraża się wzorem:
e-(E2 - E1) / kBT

Przy zwijaniu się polimerów, energia może się podnieść przy przestawieniu z prawdopodobieństwem boltzmannowskim. Czyli ze wzrostem różnicy energii przed i po ruchu prawdopodobieństwo podwyższenia się energii rośnie. Energia między poszczególnymi cząsteczkami podawana jest celowo w jednostkach kBT. W tym momencie w naszym wzorze wystarczy jedynie policzyć e-(Epo - Eprzed) co przełożone na język Java wygląda następująco:

  /**
   * Losuje liczbe, określa prawdopodobieństwo przestawienia
   * w zależności od energii.
   *
@param energy1 - energia przed przestawieniem
   *
@param energy2 - energia po przestawieniu
   *
@return 1 - jeśli ma się przestawić;
   * 0 - jeśli nie ma się przestawić.
   */
 
public static boolean randBoltzmann (float energy1, float energy2) {
   
int losowa;
   
double boltzmanProbability;
    Random rand =
new Random ();
    losowa = rand.nextInt
(100)+1;
    boltzmanProbability = Math.exp
(energy1 - energy2);
   
return (losowa<= ((int)(boltzmanProbability*100)));
 
}

Posted on Thu, 16 Dec 2004 01:01 by leeloo (1350 day(s) old) Trackbacks [1171]

Czym jest Self Avoiding Random Walk?

Tłumacząc nazwę jest to błądzenie przypadkowe z samounikiem. Ruch taki przypomina ruchy Browna z tą różnicą, że przebyta droga nie może się powtarzać. Nie można wrocić na punkt w przestrzeni, w którym się już było. Strona dobrze tłumacząca ten ruch (na siatce kwadratowej) oraz pokazująca jak obliczyć ilość możliwych stanów znajduje się tutaj.

Posted on Thu, 16 Dec 2004 00:39 by leeloo (1350 day(s) old) Trackbacks [123]

Ekstrapolacja wykresu.

Skleciłam dziś prosty programik do ekstrapolowania wykresu. Źródło można pobrać w javie albo w C (by Ikuko). Nie wiem czy jest to poprawne, ale tak mi się wydaje. Jest to szukanie (metodą pełnego przeglądu) punktu przy którym pola figur przed i za tym punktem są sobie równe (albo najbardziej zbliżone do siebie). Co do obliczania pól, to można chyba powiedzieć, że pola są całkowane. Graficznie można to przedstawić następująco:

Idea ekstrapolacji.

Posted on Sun, 16 Jan 2005 13:58 by leeloo (1320 day(s) old) Trackbacks [257]

sierpień 2008
Pn Wt Śr Cz Pt So 
<  lip | sie |  wrz  >
    123
45678910
11121314151617
18192021222324
25262728293031
       
About:

Zawód: fizyk techniczny. Zainteresowania pozafizyczne: Debian, Java, chór. Muzyka najczęściej występująca w playliście: Mike Oldfield, Roger Waters, Pink Floyd.

E-mail: Natalia Kruszewska : lastlogs


Polecam przeczytać:
qaoslp3księgarnia


Kepler Johannes
Sen czyli wydane pośmiertnie dzieło poświęcone astronomii księżycowej

Zobacz!


Links:

Webstartowalna wersja programu do symulacji tworzenia się zarodków i klastrów z łańcuchów SARW [The webstartable version of application to aggregating the SARW chains]

Webstartowalna wersja programu do pracy magisterskiej.

Źródła programu Fizyka Polimerów (wersja 0.1).
Źródła programu Agregacja Polimerów (wersja 0.4).

Categories:
Recently:
ClustrMaps:

Locations of visitors to this page

Syndication:
XML RSS ATOM

Powered by blojsom

Blogwise

Jinx shop