fmincon returns wrong length
3 views (last 30 days)
Show older comments
Hi! I have a large Simulink- Modell in which I want to optimize two PI- controllers. My variables are x_1... x_4 such as:
x = [Kp_1 Ti_1 Kp_2 Ti_2];
[x,f,eflag,output] = fmincon(@fun,x0,[],[],[],[],lb,ub,@mynlconst,opts);
In my nonlinear constrains I added 20 constrains, for example:
function [c,ceq] = mynlconst(x)
ceq = [];
set_param(char([SimName '/CF/Kp_1']), 'Gain', 'x(1)');
set_param(char([SimName '/CF/Ti_1']), 'Gain', 'x(2)');
% Same for x(3) and x(4)
opts = simset('DstWorkspace','current','SrcWorkspace','base');
sim(SimName,Tend,opts);
c(1) = max(yout(:,1)) - MaxPX;
c(2) = -min(yout(:,1)) - MinPX;
c(3) = max(yout(:,3)) - MaxTX;
c(4) = -min(yout(:,3)) - MinTX;
c(5) = max(yout(:,5)) - MaxHX;
c(6) = -min(yout(:,5)) - MinHX;
|
c(20)= ...;
yout is a matrix from Simulink with the size (130,variables). As constrains I've used the max, min of the vector.
My optimazion function fun (To keep it simple I just wrote the necessary parts):
function y = fun(x)
set_param(char([SimName '/CF/Kp_1']), 'Gain', 'x(1)');
set_param(char([SimName '/CF/Ti_1']), 'Gain', 'x(2)');
% Same for x(3) and x(4)
opts = simset('DstWorkspace','current','SrcWorkspace','base');
sim(SimName,Tend,opts);
y = e'*e; % e= error, imput of controller
Somehow I get a vector x length 130, my Sample lengh :( I just want a optimized variable x legnth 4.
Any suggestions?
Thank you!
0 Comments
Accepted Answer
Alan Weiss
on 8 Oct 2014
What is your x0 input to fmincon? The returned solution x has the same size as x0.
Alan Weiss
MATLAB mathematical toolbox documentation
4 Comments
More Answers (0)
See Also
Categories
Find more on Nonlinear Control in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!