Gyakorlati alapok
Fibonacci rejtett ékszere: az aranyarány
Az előző fejezetben felfedeztük a Fibonacci-sorozat belső matematikai szépségét és sikeresen implementáltuk Java-nyelven. A számsor azonban...
0 - 1 - 1 - 2 - 3 - 5 - 8 - 13 - 21 - 34...
...további kincset rejteget magában aranyarány néven, mert az egyenletes belső arányosság miatt az aranyarány nagyjából 1.618 körül, "kváziállandó" érték, jele a nagy görög FI (Φ). Kiszámítása:
Φ = a / b
...ahol a a nagyobbik arány, b a kisebbik.
Mivel a FI irracionális szám, nem írható fel 2 egész szám hányadosaként, ezért az osztások csak közelítő értéket adhatnak.
A FI értéke 1.618 körül mozog.
Bevezetésképpen melegítsünk be a Fibonacci-sorozat egyik, már publikált Java-implementációjával:
public class Main {
public static void main(String[] args) {
int [] tomb = new int[20];
tomb[0] = 0;
tomb[1] = 1;
for (int i = 0; i < tomb.length-2; i++){
tomb[i+2] = tomb[i] + tomb[i+1];
System.out.print (tomb[i] + " ");
}
}
}
Végeredmény:
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181
Bizonyítsuk be az állításokat a fenti Java-kód kis módosításával. Legelsősorban az inicializálás értékeit kell megváltoztatni...
tomb[0] = 2.0;
tomb[1] = 3.0;
...hogy az osztásokba ne keveredjen 0. Másodsorban pedig -szintén az osztás miatt-, a tömb és minden változó típusát double típusra kellett változtatni.
public class Main {
public static void main(String[] args) {
double [] tomb = new double[12];
tomb[0] = 2.0;
tomb[1] = 3.0;
for (int i = 0; i < tomb.length-2; i++){
tomb[i+2] = tomb[i] + tomb[i+1];
double aranyarany = tomb[i+1] / tomb[i];
System.out.println (aranyarany);
}
}
}
Végeredmény:
1.5
1.6666666666666667
1.6
1.625
1.6153846153846154
1.619047619047619
1.6176470588235294
1.6181818181818182
1.6179775280898876
1.6180555555555556
Az aranyarány viszonylag állandó értéke tehát bizonyítást nyert. Most nézzük meg a kiszámítás kódját nem tömbös, hanem egyszerű változós megoldásban is. Ennek már szintén publikált előzménye a következő:
public class Main {
public static void main(String[] args) {
int felsoHatar = 12;
double elsoSzam = 2;
double masodikSzam = 3;
double eredmeny = 0;
double aranyarany = 0;
for (int i = 0; i < felsoHatar; i++){
eredmeny = elsoSzam + masodikSzam;
aranyarany = masodikSzam / elsoSzam;
elsoSzam = masodikSzam;
masodikSzam = eredmeny;
System.out.println(aranyarany);
}
}
}
Végeredmény:
1.5
1.6666666666666667
1.6
1.625
1.6153846153846154
1.619047619047619
1.6176470588235294
1.6181818181818182
1.6179775280898876
1.6180555555555556
1.6180257510729614
1.6180371352785146
Láthatjuk, hogy FI értéke a 3 és 5 számpárosnál áll be 1.6 körüli értékre, hiszen 3 / 2 még 1.5.