Bad cell reference with cell array of function handles.

3 visualizzazioni (ultimi 30 giorni)
I'm having a bad time figuring out what's wrong with this code:
dk = [1;1];
xmin = [1;1];
f = @(x1,x2)(x1 + x2);
aux = cell(size(xmin));
for i = 1 : length(xmin)
aux{i} = @(a)(xmin(i)+a*dk(i));
end
fa = @(a) f(aux{:}(a));
Given a multivariable function "f", when I try to evaluate "fa" at a given "a" (fa(1)), I get the following error: "Bad cell reference operation". Everything works perfectly by doing
fa = @(a) f(aux{1}(a), aux{2}(a));
but my application must work for an unknown number of variables of f.
  2 Commenti
KSSV
KSSV il 21 Ago 2017
What version you are on? It is working in 2017(a)
Thales Silva
Thales Silva il 21 Ago 2017
Modificato: Thales Silva il 21 Ago 2017
The loop-variable is substituted and dk was previously defined. You can check it out by writing
fa = @(a) f(aux{1}(a), aux{2}(a));
and evaluating
f(1)
I'm using R2013a.

Accedi per commentare.

Risposta accettata

Walter Roberson
Walter Roberson il 21 Ago 2017
It is not legal to use () indexing with an unknown number of arguments produced by a cell array expansion. Also, MATLAB has no compact syntax for executing a number of functions with the same argument.
f_cell = @(args_cell) f(args_cell{:}); %utility anonymous function
fa = @(a) f_cell( cellfun( @(F) F(a), aux, 'uniform', 0) );
  2 Commenti
Guilherme Moraes
Guilherme Moraes il 21 Ago 2017
I had the same problem and this worked perfectly, thank you very much!
Thales Silva
Thales Silva il 21 Ago 2017
It works!!! God bless smart people... Thanks a lot...

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Operators and Elementary Operations in Help Center e File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by