Nie jestem ekspertem od matlaba, ale można tak:
g=@(func,arg,iter)eval([repmat('func(',1,iter), int2str(arg),repmat(')',1,iter)]);
Wtedy możemy policzyć na przykład f(f(f(f(2)))) z Twojego przykładu:
>> g(@(x)x^2,2,4)
ans =
65536
Funkcja g(...) jest nawet nieco uniwersalna, bo funkcja iterowana też jest argumentem.
Pozostaje pytanie, czy taka struktura jest użyteczna/przejrzysta. Często znacznie prościej użyć pętli, funkcji zagnieżdżonej itp. Zwłaszcza, że interpreter Matlaba nie przepada za takimi potworkami. Iterowanie funkcji to niezbyt efektywna droga w pracy w Matlabie.
Niemniej można poćwiczyć sobie pracę z uchwytami funkcji tworząc choćby funkcję anonimową zwracającą dany element ciągu Fibbonaciego:
>> s1=@(x)[x(2),x(1)+x(2)];
>> s2=@(fun,n)min(eval([repmat('fun(',1,n),'[0,1]',repmat(')',1,n)]));
>> fibbonaci=@(n)s2(s1,n);
>> clear s1 s2 %funkcja fibbonaci zadziała bez tych definicji, choć w workspace wygląda to zagadkowo
>> for k=1:10, disp(fibbonaci(k)), end
1 1 2 3 5 8 13 21 34 55
choć są oczywiście znacznie prostsze sposoby.