INDIETRO
 Laboratorio 2
AVANTI

la successione di Fibonacci

La successione di Fibonacci ha i primi due numeri uguali ad uno, ed ogni numero è la somma dei due precedenti.
Essendo la sua definizione una semplice equazione alle differerenze finite lineare, è nota la sua soluzione generale, per cui si può calcolare direttamente l'ennesimo termine senza calcolare quelli 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)) ??

help: fibo.mpl
(Per leggerlo dentro maple usare il comando read "fibo.mpl"; )

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....

help: fibo.m  


INDIETRO
Laboratorio Didattico di Matematica Computazionale - Sergio Steffè - AA 2017/2018 - PISA
AVANTI