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