How to make inline function using for loop?

4 次查看(过去 30 天)
I need to make following function using "function handle"....
x=[x(1),x(2),x(3),...…,x(N)]……..Let say N=50
for i=1:1:N
fun(i)=@(x) 2*a + b + 4*c*d + 6*e %a, b ,c , d and e are iterative variables
end
a=[x(1),x(6),x(11),x(16),x(21),x(26),....,x(46)]
b=[x(2),x(7),x(12),x(17),x(22),x(27),.....x(47)]
c=[x(3),x(8),x(13),x(18),x(23),x(28),.....x(48)]
d=[x(4),x(9),x(14),x(19),x(24),x(29),.....x(49)]
e=[x(5),x(10),x(15),x(20),x(25),x(30),.....x(50)]
How can I write function using for loop?
  2 个评论
Walter Roberson
Walter Roberson 2018-9-22
Why are you storing the same calculated anonymous function N times?
Sajjad Malik
Sajjad Malik 2018-9-22
Ultimately I use this function in "fmincon".....as an objective function...I tried other methods but could not find success.

请先登录,再进行评论。

采纳的回答

Walter Roberson
Walter Roberson 2018-9-22
fun = cell(N, 1);
F = @(x) 2*x(1:5:N) + x(2:5:N) + 4*x(3:5:N).*x(4:5:N) + 6*x(5:5:N);
fun(:) = {F};
Now fun stores N copies of the same function handle, each of which implements
@(x) 2*a + b + 4*c*d + 6*e
where a, b, c, d, e are short-hand for
a=[x(1),x(6),x(11),x(16),x(21),x(26),....,x(46)]
b=[x(2),x(7),x(12),x(17),x(22),x(27),.....x(47)]
c=[x(3),x(8),x(13),x(18),x(23),x(28),.....x(48)]
d=[x(4),x(9),x(14),x(19),x(24),x(29),.....x(49)]
e=[x(5),x(10),x(15),x(20),x(25),x(30),.....x(50)]
Each of the function handles will return a vector of length 50/5 = 10.
  5 个评论
Walter Roberson
Walter Roberson 2018-9-23
No. When your objective function returns a vector of results, then fmincon and most other minimizers are not appropriate. You would need something like gamultiobj() which tries to find pareto fronts.

请先登录,再进行评论。

更多回答(0 个)

Community Treasure Hunt

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

Start Hunting!

Translated by