Setting up Dynamical Systems
Contents
In an initial step the order of the dynamical system has to be specified. This has to be done when initialisng the dynamical system via
DS = DynamicalSystem(order);
Depending on the dynamical system which is to be analysed, the following procedures have to be followed.
Setting up a Second Order Dynamical System
In this section we explain how DynamicalSystem constructs a dynamical system object in second order form which is given as:
- Second order
The linear system matrices can be set via the set method of the class as
set(DS,'M',M,'C',C,'K',K);
is a nonlinear polynomial function of degree two or higher an can also be set with the set method as.
set(DS,'fnl',fnl);
This nonlinear force may be prepared in one of the following ways:
Using tensor format:
In tensor notation the second order nonlinear internal forces are expanded as
The order i nonlinearity is thus represented by a dimensional tensor . For implementation it is represented by a multidimensional array of dimension . These arrays are stored in a cell array. So in this case one might obtain the order i nonlinearity as
fi = f{i}
Here is a polynomial function of degree two or higher, which is stored as a cell array such that corresponds to polynomials of degree k+1. is given by a tensor of order k+2, where the first mode corresponds to indices for the force vector.
Using multi-index format: In multi-index notation the second order nonlinear internal forces are expanded as
The variate monomials in this expansion are written as . The nonlinearity in this case is stored in a struct array with fields that characterise its coefficients and the corresponding multi-indices. Thus the relevant quantities are stored
fm = f(m_abs).coeffs fm = f(m_abs).ind
This extracts all coefficients of the Taylor expansion and the corresponding order multi-indices m. So is a and is a dimensional array, where denotes the number of unique multi-indices at order .
In case of velocity-independent internal forces, the tensors and multi-indices are of lower dimensionality respectively, as they only require half the input variables to describe the action of the forces.
Second order external excitation
The external force is provided as a Fourier Expansion in terms of the relevant harmonics.
Furthermore the forcing frequency is given by a frequency vector. This force may be input to the dynamical system in various formats:
Format 1: As a struct array
fext.epsilon = epsilon fext.data = data
where is a struct array with entries
data(i).kappa = kappa_i data(i).coeffs = f_kappa_i
In this case it is passed to the DS object as
DS.add_forcing(fext)
Format 2: With harmonics and coefficients
If only a single harmonic is used for a periodic excitation, the harmonics and the coefficients can be input manually as
coeffs = [f_kappa_1, f_kappa_2] Kappas = [kappa_1, kappa_2]
The second order form is converted into the first order form with
Setting up a First Order Dynamical System
In this section we explain how the class constructs a dynamical system object in first order form which is given as:
The linear system matrices can be set via the set method of the class as
set(DS,'A',A,'B',B);
is a nonlinear polynomial function of degree two or higher an can also be set with the set method as.
set(DS,'F',F);
This nonlinear force may be prepared in one of the following ways:
Using tensor format:
In tensor notation the first order nonlinear internal forces are expanded as
The order i nonlinearity is thus represented by a dimensional tensor . For implementation it is represented by a multidimensional array of dimension . These arrays are stored in a cell array. So in this case one might obtain the order i nonlinearity as
Fi = F{i}
Using multi-index format: In multi-index notation the first order nonlinear internal forces are expanded as
The variate monomials in this expansion are written as . The nonlinearity in this case is stored in a struct array with fields that characterise its coefficients and the corresponding multi-indices. Thus the relevant quantities are stored
Fm = F(m_abs).coeffs m = F(m_abs).ind
This extracts all coefficients of the Taylor expansion and the corresponding order multi-indices m. So is a and is a dimensional array, where denotes the number of unique multi-indices at order .
First order external excitation
The external force is provided as a Fourier Expansion in terms of the relevant harmonics.
Furthermore the forcing frequency is given by a frequency vector. This force may be input to the dynamical system in various formats:
Format 1: As a struct array
Fext.epsilon = epsilon Fext.data = data
where is a struct array with entries
data(i).kappa = kappa_i data(i).coeffs = F_kappa_i
In this case it is passed to the DS object as
DS.add_forcing(Fext)
Format 2: With harmonics and coefficients
If only a single harmonic is used for a periodic excitation, the harmonics and the coefficients can be input manually as
coeffs = [F_kappa_1, F_kappa_2] Kappas = [kappa_1, kappa_2]
In general, the nonlinear and external forces are stored as follows:
Specifications
Several options can be passed to the dynamical system class, to further specify characteristics of the underlying system, as well as how it is supposed to be handled computationally. In the following they are presented with their default values. If a system with non default parameters is treated, these have to be adapted.
set(DS.Options,'Nmax',6); % Maximal sytem size for which the full spectrum is computed set(DS.Options,'Emax',10); % Maximal number of Eigenvalues and -vectors that are computed if system size is larger than Nmax set(DS.Options,'notation','multiindex');% Notation in which nonlinear forces are to be handled, can be 'multiindex' or 'tensor' set(DS.Options,'RayleighDamping',true); % Whether the underlying damping model is of Rayleigh Type set(DS.Options,'BaseExcitation',false); % Whether the external force arises due to an excitation of the base which leads to a frequency dependent forcing amplitude. set(DS.Options,'DStype','real'); % To determine whether dynamical system possesses any complex valued quantities. set(DS.Options,'outDOF',[]); % For which DOF of the full system the relevant quantities should be explicitly displayed and stored. set(DS.Options,'HarmonicForce',true); % To determine whether time dependence of the external forcing is harmonic or not set(DS.Options,'lambdaThreshold',1e16); % Threshold beyond which stiff eigenmodes will be removed set(DS.Options,'sigma',0); % value around which eigenvalues are computed. Is set to zero by default which corresponds to the 'smallestabs' setting in the built in eigs function. set(DS.Options,'RemoveZeros',true); % Remove eigenvalues with zero real part from the spectrum. Relevant for the computation of center manifolds and in parameter dependent SSMs.
Methods
The first and crucial method which is provided for the DS class is the method, which solves specified bits of the eigenvalue problem for the linear truncation of the dynamical system that is input. It is invoked via
[V,D,W] = DS.linear_spectral_analysis();
When run, it outputs the three arguments the left and right eigenvectors and the eigenvalues of the eigenproblems
or
Furthermore it sets up an internal data structure with fields that contain the essential information about the truncated spectrum of the dynamical system which are used for invariant manifold computations.
For the evaluation of the nonlinear internal and the external forces the following functions are provided.
fnl = DS.compute_fnl(x,xd); Fnl = DS.evaluate_Fnl(z); fext = DS.compute_fext(t,x); Fext = DS.evaluate_Fext(t,z);
These are also used for the construction of the governing ODE which is evaluated via
f = DS.odefun(t,z);
Further functionalities which are provided for this class include the evaluation of the Jacobians of the nonlinear internal forces via
dfnldx = DS.compute_dfnldx(x,xd); dfnldxd = DS.compute_dfnldxd(x,xd);
and the residual that may be used for the integration of ODEs,
[ r, drdqdd,drdqd,drdq, c0] = DS.residual(q, qd, qdd, t);