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. |