www.gusucode.com > control 案例程序 matlab源码代码 > control/ModelArrayWithVariationsInTwoParametersExample.m
%% Model Array with Variations in Two Parameters % This example shows how to create a two-dimensional (2-D) array of transfer % functions using |for| loops. One parameter of the transfer function % varies in each dimension of the array. % % You can use the technique of this example to create higher-dimensional % arrays with variations of more parameters. Such arrays are useful for % studying the effects of multiple-parameter variations on system response. %% % The second-order single-input, single-output (SISO) transfer function % % $$H\left( s \right) = \frac{{{\omega ^2}}}{{{s^2} + 2\zeta \omega s + {\omega ^2}}}.$$ % % depends on two parameters: the damping ratio, $\zeta$, and the natural % frequency, $\omega$. If both $\zeta$ and $\omega$ vary, you obtain % multiple transfer functions of the form: % % $${H_{ij}}\left( s \right) = \frac{{\omega _j^2}}{{{s^2} + 2{\zeta _i}{\omega _j}s + \omega _j^2}},$$ % % where $\zeta_i$ and $\omega_j$ represent different measurements or % sampled values of the variable parameters. You can collect all of these % transfer functions in a single variable to create a two-dimensional model % array. %% % Preallocate memory for the model array. Preallocating memory is an % optional step that can enhance computation efficiency. To preallocate, % create a model array of the required size and initialize its entries to zero. % Copyright 2015 The MathWorks, Inc. H = tf(zeros(1,1,3,3)); %% % In this example, there are three values for each parameter in the % transfer function _H_. Therefore, this command creates a 3-by-3 array of % single-input, single-output (SISO) zero transfer functions. %% % Create arrays containing the parameter values. zeta = [0.66,0.71,0.75]; w = [1.0,1.2,1.5]; %% % Build the array by looping through all combinations of parameter values. for i = 1:length(zeta) for j = 1:length(w) H(:,:,i,j) = tf(w(j)^2,[1 2*zeta(i)*w(j) w(j)^2]); end end %% % |H| is a 3-by-3 array of transfer functions. $\zeta$ varies as you move % from model to model along a single column of |H|. The parameter $\omega$ % varies as you move along a single row. %% % Plot the step response of |H| to see how the parameter variation affects % the step response. stepplot(H) %% % You can set the |SamplingGrid| property of the model array to help keep % track of which set of parameter values corresponds to which entry in the % array. To do so, create a grid of parameter values that matches the % dimensions of the array. Then, assign these values to % |H.SamplingGrid| with the parameter names. [zetagrid,wgrid] = ndgrid(zeta,w); H.SamplingGrid = struct('zeta',zetagrid,'w',wgrid); %% % When you display |H|, the parameter values in |H.SamplingGrid| are % displayed along with the each transfer function in the array.