# Loop around a toolbox

3 views (last 30 days)
Andrew on 30 Nov 2023
Commented: Walter Roberson on 30 Nov 2023
Dear community,
I have a question concerning the optimization toolbox.
I have used the optimization toolbox to solve a problem. And that is working fine so far.
Now, I would like to see the solutions for different input variables (let's say for values from 40 to 800) using a loop and store the solutions in a matrix.
The problem is, if I just wrap the editor in a loop (as I would do with usual code), I get an error.
I think MATLAB does not recognize that the "for N = 40:800" at the beginning of the editor and the "end" at the editor's end belong together.
Does somebody know a solution to this problem?
##### 3 CommentsShow 1 older commentHide 1 older comment
Andrew on 30 Nov 2023
Hi, in the code below I have converted the task to editable code.
The error I get is: "Function definition are not supported in this context. Functions can only be created as local or nested functions in code files."
for N = 40:80
v = [1];
m = zeros(1,N);
for n = 1:N
m(n)=n;
end
nvar = 5;
LB = [5 0 -5 -10 -20];
UB = [40 3 5 20 20];
q = zeros(1,N);
% Pass fixed parameters to objfun
objfun3 = @(optimInput)objectiveFcn(optimInput,Daten,m,N,v);
% Set nondefault solver options
options3 = optimoptions("ga","PopulationSize",300,"MaxGenerations",400);
% Solve
[solution,objectiveValue] = ga(objfun3,nvar,[],[],[],[],LB,UB,[],[],options3);
% Clear variables
clearvars objfun3 options3
function f = objectiveFcn(optimInput, Daten, m, N, v)
Function definition are not supported in this context. Functions can only be created as local or nested functions in code files.
a = optimInput(1);
b = optimInput(2);
c = optimInput(3);
d = optimInput(4);
e = optimInput(5);
for n = 1:N
q(n) = (Daten(v,n)-(a*sin(b*m(n)+c) + (d+e*m(n))))^2;
end
f = sum(q);
end
end
Walter Roberson on 30 Nov 2023

Matt J on 30 Nov 2023
This runs:
for N = 40:42 %<---shortened
v = [1];
m = zeros(1,N);
for n = 1:N
m(n)=n;
end
nvar = 5;
LB = [5 0 -5 -10 -20];
UB = [40 3 5 20 20];
q = zeros(1,N);
% Pass fixed parameters to objfun
objfun3 = @(optimInput)objectiveFcn(optimInput,Daten,m,N,v);
% Set nondefault solver options
options3 = optimoptions("ga","PopulationSize",300,"MaxGenerations",400);
% Solve
[solution,objectiveValue] = ga(objfun3,nvar,[],[],[],[],LB,UB,[],[],options3);
% Clear variables
clearvars objfun3 options3
end
ga stopped because the average change in the fitness value is less than options.FunctionTolerance. ga stopped because the average change in the fitness value is less than options.FunctionTolerance. ga stopped because it exceeded options.MaxGenerations.
function f = objectiveFcn(optimInput, Daten, m, N, v)
a = optimInput(1);
b = optimInput(2);
c = optimInput(3);
d = optimInput(4);
e = optimInput(5);
for n = 1:N
q(n) = (Daten(v,n)-(a*sin(b*m(n)+c) + (d+e*m(n))))^2;
end
f = sum(q);
end