fmincon returns wrong length

조회 수: 4 (최근 30일)
K0ertis
K0ertis 2014년 10월 8일
댓글: K0ertis 2014년 10월 8일
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!

채택된 답변

Alan Weiss
Alan Weiss 2014년 10월 8일
What is your x0 input to fmincon? The returned solution x has the same size as x0.
Alan Weiss
MATLAB mathematical toolbox documentation
  댓글 수: 4
K0ertis
K0ertis 2014년 10월 8일
Did I wrote my functions in the correct form? For example mynlynconst: by writing 20 nonlinear constraints in this form?
Thank you
K0ertis
K0ertis 2014년 10월 8일
Just found out that i overwrote x in my Simulink Modell. Thank you for your help!

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Frequency Response Estimation에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by