2013-11-23 5 views
2

Я получил этот массив встроенных функций, которые я определил:Matlab: массив встроенных функций. Вызов одной функции

x = 0:1/(nDatasets-1):1; 

M = 24; % number of base functions 
f = cell(M,1); 
for m = 1:M 
    f{m} = inline(sprintf('exp(- (x- %d/(%d+1)).^2/(1/(2*%d^2)))', m,M,M), 'x'); 
end 

Но я понятия не имею, как я могу теперь доступ/вызова одной функции.

+1

Рассмотрите возможность переключения на анонимные функции. Встроенные функции устарели и будут удалены из MATLAB. – chappjc

+0

Спасибо, но это просто упражнение! – displayname

ответ

1

Просто с f{index}(arguments). Пример:

>> f{1}=inline(sprintf("x^2")) 
f = 
{ 
    [1,1] = f(x) = x^2 
} 
>> f{2}=inline(sprintf("x^3")) 
f = 
{ 
    [1,1] = f(x) = x^2 
    [1,2] = f(x) = x^3 
} 
>> f{1}(2) 
ans = 4 
>> f{2}(2) 
ans = 8 

В качестве альтернативы, вы можете назначить функцию встроенного во временную переменную, а затем использовать его как обычную функцию:

>> tmpf=f{1} 
tmpf = f(x) = x^2 
>> tmpf(2) 
ans = 4 

Обратите внимание, что это также работает с анонимными функциями:

>> f{1}[email protected](x) x^2 
f = 
{ 
    [1,1] = 

@(x) x^2 

} 
>> f{2}[email protected](x) x^3 
f = 
{ 
    [1,1] = 

@(x) x^2 

    [1,2] = 

@(x) x^3 

} 
>> f{1}(2) 
ans = 4 
>> f{2}(2) 
ans = 8 
>> 
Смежные вопросы