![]() |
|
la successione di Fibonacci
La successione di Fibonacci ha i primi due numeri uguali ad uno, ed ogni numero e' la somma dei due precedenti.come esercizio scriviamo sia in matlab che in maple delle routine per il calcolo della successione, e confrontiamo i tempi di calcolo e i valori con quelli teorici.
In maple possiamo scrivere una procedura ricorsiva:
fib:=proc(n::posint)
if n=1 then 1
elif n=2 then 1
else fib(n-1)+fib(n-2)
fi
end;
La procedura risulta lentissima: infatti succede che continua a ricalcolare gli stessi numeri più volte!
Se si inserisce la istruzione:
option remember;
allora la procedura mette in memoria i valori calcolati e questo velocizza enormemente il calcolo.
La formula esatta è:
f:=n->(((1+sqrt(5))/2)^n - ((1-sqrt(5))/2)^n)/sqrt(5);
Che differenza c'è tra chiedere evalf(f(3)) ed expand(f(3)) ??
In matlab siamo ovviamente limitati dall'usare numeri floating point.
Si crei una function x=fibonacci(m) che, dato m, restituisca il vettore x dei primi m termini della successione.
Si plottino i rapporti fibonacci(m)/fibonacci(m-1) e si plotti su scala logaritmica la successione di Fibonacci.
Questi plot da soli ci dicono qualcosa sull'andamento della successione....
![]() |
|