www.gusucode.com > Chapter_5 > Chapter_5/Section_7/Chapter_5_Section_7_Script.m
%Book Title: Practical Design and Application of Linear MPC %Chapter Title: Single MPC Design of a Ship %Chapter: 5 %Section: 7 %Authors: Nassim Khaled and Bibin Pattel %Last Modified: 5/20/2017 %% Plotting Settings set(0,'DefaultLineLineWidth',1) set(0,'DefaultAxesFontWeight','bold') set(0,'DefaultAxesFontName','Arial') set(0,'DefaultAxesFontSize',12) close all %% Manipulated Variables figure subplot(2,1,1) %% Plot the propeller speed plot(Propeller_Speed_MPC(:,1),Propeller_Speed_MPC(:,2)) hold on plot(npr_achievable(:,1),npr_achievable(:,2)) legend('n_p_r MPC','n_p_r achievable') xlabel('Time [s]') ylabel('Propeller Speed [rad/s]') title('Manipulated Variables') subplot(2,1,2) %% Plot the rudder angle plot(Rudder_Angle_MPC (:,1),Rudder_Angle_MPC(:,2)) hold on plot(alpha_achievable(:,1),alpha_achievable(:,2)) legend('\alpha MPC','\alpha achievabled') xlabel('Time [s]') ylabel('Rudder Angle [rad]') %% Plotting the tracking performance of MPC figure subplot(2,1,1) plot(r_reference(:,1),r_reference(:,2)) hold on plot(r_simulation(:,1),r_simulation(:,2)) legend('r reference ','r MPC') ylabel('r [rad/s]') subplot(2,1,2) plot(u_reference(:,1),u_reference(:,2)) hold on plot(u_simulation(:,1),u_simulation(:,2)) legend('u reference ','u MPC') ylabel('u [m/s]') %%Check performance against requirements display('Requirement #1: The maximum absolute error for the turning rate of the ship during the provided maneuver shall not exceed 4.5x10-3 rad/s') max(abs(r_reference(:,2)-r_simulation(:,2)))<4.5e-3 display('Requirement #2: The maximum absolute error for the ship forward speed during the pro-vided maneuver shall not exceed 0.8 m/s.') max(abs(u_reference(:,2)-u_simulation(:,2)))<0.8 display('Requirement #3:The root mean square error for turning rate of the ship during the provided maneuver shall not exceed 8x10-4 rad/s.') sqrt(mean((r_reference(:,2)-r_simulation(:,2)).^2))< 2e-3 display('Requirement #4: The root mean square error for the ship forward speed during the provided maneuver shall not exceed 0.25 m/s.') sqrt(mean((u_reference(:,2)-u_simulation(:,2)).^2))< 0.25 'Requirement #5: The forward speed during the provided maneuver shall not exceed the ref-erence forward speed by more than 0.5 m/s.' max((u_simulation(:,2)-u_reference(:,2)))<0.5