How to solve optimization problem with squared error sum in Simulink
조회 수: 5 (최근 30일)
이전 댓글 표시
Hi, I have a Simulink model with 4 PIDs and a non-linear plant. I wrote a script running a sdo.SimulationTest and logging the output data and the input data of the model. Then I calculated the squared error sum J. Is it possible to use an optimizer minimizing this squared error sum and using the Parameters of the PID as variables. There is no functional connection between these two. Below is my code. Thank you
startSimulator;
sim_obj=sdo.SimulationTest('Hummingbird_Simulation_PositionControl_original')
Param=param.Continuous([2;1.5;2;2;1.5;2;5;1;2.8]);
Param.Minimum=[0;0;0;0;0;0;0;0;0];
Param.Maximum=[10;10;10;10;10;10;10;10;10];
sim_obj.Parameters=Param;
sim_obj.LoggingInfo.LoggingMode='LogAllAsSpecifiedInModel';
sim_out=sim(sim_obj);
Y_x=sim_out.LoggedData.get('logsout').getElement('X').Values;
Y_y=sim_out.LoggedData.get('logsout').getElement('Y').Values;
Y_z=sim_out.LoggedData.get('logsout').getElement('Z').Values;
W_x=sim_out.LoggedData.get('logsout').getElement('X_cmd').Values;
W_y=sim_out.LoggedData.get('logsout').getElement('Y_cmd').Values;
W_z=sim_out.LoggedData.get('logsout').getElement('Z_cmd').Values;
W=[W_x.get('Data') W_y.get('Data') W_z.get('Data')];
Y=[Y_x.get('Data') Y_y.get('Data') Y_z.get('Data')];
length=length(W);
time=W_x.time;
E=[(W(1:length,1)-Y(1:length,1)).^2 (W(1:length,2)-Y(1:length,2)).^2 (W(1:length,3)-Y(1:length,3)).^2];
J=sum(sum(E));
end
댓글 수: 2
답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Simulink Design Optimization에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!