Programmeren in Maple: Fibonnaci polynomen

versie 1.0 voor Maple V release 5

G.J. Bex, dept. WNI, Limburgs Universitair Centrum

Fibonnaci polynomen zijn gedefinieerd als: [Maple Math] en [Maple Math] , [Maple Math] . Deze definitie is recursief en kan eenvoudig in Maple vertaald worden:

> fibPoly := proc(x,n::nonnegint)
if (n = 0 or n = 1) then
1;
else
x*fibPoly(x,n-1) + fibPoly(x,n-2);
fi;
end:

Bij wijze van test kunnen de eerste elf Fibonnaci polynomen berekend worden:

> for i from 0 to 10 do
collect(fibPoly(x,i),x)
od;

[Maple Math]

[Maple Math]

[Maple Math]

[Maple Math]

[Maple Math]

[Maple Math]

[Maple Math]

[Maple Math]

[Maple Math]

[Maple Math]

[Maple Math]

> time(fibPoly(x,20));

[Maple Math]

Merk op dat er dikwijls dezelfde berekening moet uitgevoerd worden: voor [Maple Math] moet [Maple Math] berekend worden, maar ook voor [Maple Math] ! Het zou efficienter zijn indien Maple deze tussenresultaten zou kunnen bewaren. Dit kan met behulp van de optie 'remember':

> fibPoly2 := proc(x,n::nonnegint)
option remember;
if (n = 0 or n = 1) then
1;
else
x*fibPoly2(x,n-1) + fibPoly2(x,n-2);
fi;
end:

Het verschil in uitvoeringstijd tussen 'fibPoly' en 'fibPoly2' is impressionant.

> time(fibPoly2(x,20));

[Maple Math]

Uiteraard vraagt een procedure met de 'remember' optie meer geheugen zodat er soms geen gebruik van kan maken. Het spreekt vanzelf dat de optie bijna nooit nuttig zal zijn bij numerieke toepassingen waarbij het argument van de functie een reeel getal is.