33 views (last 30 days)

I want to creat a function with multiple variables, something like:

f = @(x) = f1(x) + f2(x) + ... + fn(x)

where x is a n-dimensional vector which can be define by user. The number of functions f1,f2,..,fn can be define by user, too.

The question is can i use a for loop in function handle to define f according to the length of vector x?

Stephen Cobeldick
on 24 Jun 2020

Edited: Stephen Cobeldick
on 24 Jun 2020

You can simply store function handles in a cell array of any size and use cellfun. No loop required.

>> C = {@sin,@sqrt,@pow2};

>> F = @(x) sum(cellfun(@(f)f(x),C));

>> F(3)

ans = 9.8732

compare with:

>> sin(3) + sqrt(3) + pow2(3)

ans = 9.8732

If you really want to use a for loop then you would need to write the function in an Mfile, e.g.:

function out = myfun(x)

out = 0;

C = {@sin,@sqrt,@pow2};

for k = 1:numel(C)

out = out + C{k}(x);

end

end

Walter Roberson
on 27 Jun 2020

You said it yourself, you have an unknown number of variables. The only way to address an indefinite number of variables is to dynamically create the names of the variables and access the contents of the variables through the names you created. Which we firmly advise you not to do.

where p_n are variables.

Don't do that. Instead make p and h into vectors. Then

dot(p, h) - p(n).*h(n)

provided that p(m) and h(m) are finite.

Stephen Cobeldick
on 28 Jun 2020

"How can i define function C with unknown number of variables (i call it as N), others parameters are generate corresponding to N."

Rather than creating lots of variables the simple and efficient MATLAB way is to use one vector/matrix/array.

Your approach is making this much more complex than it needs to be.

Walter Roberson
on 26 Jun 2020

The question is can i use a for loop in function handle to define f according to the length of vector x?

NO. Anonymous functions cannot use for .

Anonymous functions can use arrayfun() and cellfun() and can use function calls that process the resulting arrays.

Opportunities for recent engineering grads.

Apply Today
## 0 Comments

Sign in to comment.