Code covered by the BSD License  

Highlights from
ddt

image thumbnail
from ddt by Gijs van Oort
Calculate time derivative as a function of state and input variables of a (nonlinear) dynamic system

ddt(of, n,state,dstate,f,u)
function DNof = ddt(of, n,state,dstate,f,u)
%DDT       Calculate time derivative as a function of state and input variables of a (nonlinear) dynamic system
% function ddt(of, n, state,dstate,f,u)
%
% Given:
%   of:     the symbolic function you want the derivative of (e.g. x2)
%   n:      n'th order derivative
%   state:  a column vector denoting the names of the state, e.g. [x1;x2]
%   dstate: the names of the states plus a d in front of them, e.g. [dx1; dx2]
%   f:      symbolic expression for the derivative of the state, e.g. [x2, sin(u1) ]
%   u:      a list of inputs, e.g. [u1]
%
% Example:
%   Suppose we have the following (nonlinear) dynamic system:
%
%       d/  / x1 \    / 2 * cos(x2) + u1 \
%       dt  \ x2 / =  \  - x1^2 + x1*u2  /   , y = x2 + x1 + u2
%
%   where x1, x2 are time-dependent states and u1/u2 are time-dependent inputs
%   and we are interested (for some reason) in the second time derivative of
%   y, expressed in terms of the state [x1;x2] and the inputs and its
%   derivatives ([u1;u2], [du1;du2], [d2u1; d2u2]). We calculate this as
%   follows:
%
%     clear
%     syms x1 x2 dx1 dx2 u1 u2;
%     eqn = [ 2*cos(x2) + u1; -x1^2 + x1*u2];
%     y = x2 + x1 + u2;
%     ddy = ddt ( y, 2, [x1;x2], [dx1;dx2], eqn, [u1;u2])
%
%   Output:
%     ddy =
%        (-2*x1+u2)*(2*cos(x2)+u1)-2*sin(x2)*(-x1^2+x1*u2)+du1+x1*du2+d2u2
%
% Note: This function needs the function 'fulldiff' by Tim Jorris, which
%   can be downloaded from Matlab's File Exchange.

% History:
% 081016 (GvO) Added example in help, Put into SVN
% 07xxxx (GvO) Made
for (i = 1:n) % do n derivations
    timedependents = num2cell([state;u]);
    dof = fulldiff(of,timedependents);
    of = subs(dof,dstate,f);
    sof = simple(of);
end
DNof = sof;

Contact us at files@mathworks.com