]> Creatis software - CreaPhase.git/blobdiff - octave_packages/control-2.3.52/optiPIDfun.m
Add a useful package (from Source forge) for octave
[CreaPhase.git] / octave_packages / control-2.3.52 / optiPIDfun.m
diff --git a/octave_packages/control-2.3.52/optiPIDfun.m b/octave_packages/control-2.3.52/optiPIDfun.m
new file mode 100644 (file)
index 0000000..7e7e845
--- /dev/null
@@ -0,0 +1,56 @@
+% ===============================================================================
+% optiPIDfun                       Lukas Reichlin                       July 2009
+% ===============================================================================
+% Objective Function
+% Reference: Guzzella, L. (2007) Analysis and Synthesis of SISO Control Systems.
+%            vdf Hochschulverlag, Zurich
+% ===============================================================================
+
+function J = optiPIDfun (C_par)
+
+  % Global Variables
+  global P t dt mu_1 mu_2 mu_3
+
+  % Function Argument -> Controller Parameters
+  kp = C_par(1);
+  Ti = C_par(2);
+  Td = C_par(3);
+
+  % PID Controller with Roll-Off
+  C = optiPIDctrl (kp, Ti, Td);
+
+  % Open Loop
+  L = P * C;
+
+  % Sum Block: e = r - y
+  SUM = ss ([1, -1]);  % Matlab converts to SS (and back) for MIMO TF connections
+
+  % Group Sum Block and Open Loop
+  SUML = append (SUM, L);
+
+  % Build System Interconnections
+  CM = [3, 1;          % Controller Input with Sum Block Output 
+        2, 2];         % Sum Block Negative Input with Plant Output
+
+  inputs = [1];        % Input 1: reference r(t)
+  outputs = [1, 2];    % Output 1: error e(t), Output 2: output y(t)
+
+  SUML = connect (SUML, CM, inputs, outputs);
+
+  % Simulation
+  [y, t_y] = step (SUML, t);
+
+  % ITAE Criterion
+  itae = dt * (t_y.' * abs (y(:, 1)));
+
+  % Sensitivity
+  S = inv (1 + L);
+  Ms = norm (S, inf);
+
+  % Objective Function
+  J = mu_1 * itae  +  mu_2 * (max (y(:, 2)) - 1)  +  mu_3 * Ms;
+
+end  % function
+
+% ===============================================================================
+