How to solve optimization problem with squared error sum in Simulink

6 ビュー (過去 30 日間)
FloRida
FloRida 2018 年 3 月 29 日
コメント済み: FloRida 2018 年 3 月 29 日
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 件のコメント
Birdman
Birdman 2018 年 3 月 29 日
Can you also share your model as well?
FloRida
FloRida 2018 年 3 月 29 日

サインインしてコメントする。

回答 (0 件)

カテゴリ

Help Center および File ExchangeSimulink Design Optimization についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by