%% Gain Surface Over Nonregular Grid
% Create a gain surface sampled at scheduling variable values that do not form a regular grid in the operating domain. The gain surface varies as a bilinear function of variables \alpha and \beta:
% K(\alpha,\beta) = K_{0} + K_{1}\alpha + K_{2}\beta + K_{3}\alpha\beta.
% Suppose that the values of interest of the scheduling variables are the following (\alpha,\beta) pairs.
% \left( {\alpha ,\beta } \right) = \left\{ {\begin{array}{l}
% {( - 0.9,0.05)}\\
% {( - 1.5,0.6)}\\
% {( - 1.5,0.95)}\\
% {( - 2.5,0.5)}\\
% {( - 3.2,0.7)}\\
% {( - 3.9,0.3)}
% \end{array}} \right..
% Specify the (\alpha,\beta) sample values as vectors.

alpha = [-0.9;-1.5;-1.5;-2.5;-3.2;-3.9];
beta = [0.05;0.6;0.95;0.5;0.7;0.3];

%
% Instead of a regular grid of (\alpha,\beta) values, here the gain surface is sampled at irregularly spaced points on (\alpha,\beta)-space.

plot(alpha,beta,'o')

% The basis functions of the expansion of K are:
% F_{1} = \alpha
% F_{2} = \beta
% F_{3} = \alpha\beta
%
% Evaluate the basis functions at each of the sample points.

F1 = alpha;
F2 = beta;
F3 = alpha.*beta;

%
% Create the tunable model of the gain surface using these sampled function values.

K = gainsurf('K',1,F1,F2,F3)

% The gain surface is represented by a 6-by-1 array of generalized matrices. Because K is a scalar gain, each element in the array is 1-by-1. Each element in the array represents K(\alpha,\beta) for the corresponding (\alpha,\beta) sample. Each of these elements depends on the tunable parameters K_0,...,K_3.
%
% Use the SamplingGrid property to associate the \alpha and \beta values with the corresponding entries in K.

SG = struct('alpha',alpha,'beta',beta);
K.SamplingGrid = SG;

% Copyright 2015 The MathWorks, Inc.