![]() |
Previous | Next | vanderpol_g.m |
[gk] = vanderpol_g(k, xk1, params)
[gk, Gk] = vanderpol_g(k, xk1, params)
initial = params.vanderpol_g_info.initial
dt = params.vanderpol_g_info.dt
mu = params.vanderpol_g_info.mu
gk
as the mean of the state at time index
k
given
xk1
is its value at time index
k-1
.
This mean is Euler's discrete approximation for the solution of the
Van Der Pol oscillator ODE; i.e.,
\[
\begin{array}{rcl}
x_1 '(t) & = & x_2 (t)
\\
x_2 '(t) & = & \mu [ 1 - x_1(t)^2 ] x_2 (t) - x_1(t)
\end{array}
\]
where the initial state is
xk1
and the time step is
dt
.
\Delta t
below).
\mu
in the Van Der Pol ODE.
k-1
.
k == 1
,
the return value
gk
is two element column vector
equal to
initial
.
Otherwise,
gk
is the two element column vector given by
\[
\begin{array}{rcl}
g_{1,k} & = & x_{1,k-1} + x_{2,k-1} \Delta t
\\
g_{2,k} & = & x_{2,k-1}
+ [ \mu ( 1 - x_{1,k-1}^2 ) x_{2,k-1} - x_{1,k-1} ] \Delta t
\end{array}
\]
where
( g_{1,k} , g_{2,k} )^\R{T}
is
gk
and
( x_{1,k-1} , x_{2,k-1} )^\R{T}
is
xk1
.
Gk
is an
n x n
matrix equal to the
Jacobian of
gk
w.r.t
xk1
.
function [gk, Gk] = vanderpol_g(k, xk1, params)
initial = params.vanderpol_g_initial;
dt = params.vanderpol_g_dt;
mu = params.vanderpol_g_mu;
n = 2;
if (size(xk1,1) ~= n) | (size(xk1,2) ~= 1)
size_xk1_1 = size(xk1, 1)
size_xk1_2 = size(xk1, 2)
error('vanderpol_g: xk1 not a column vector with two elements')
end
if (size(initial,1) ~= n) | (size(initial,2) ~= 1)
size_initial_1 = size(initial, 1)
size_initial_2 = size(initial, 2)
error('vanderpol_g: initial not a column vector with two elements')
end
if (size(dt,1)*size(dt,2) ~= 1) | (size(mu,1)*size(mu,2) ~= 1)
size_dt_1 = size(dt, 1)
size_dt_2 = size(dt, 2)
size_mu_1 = size(mu, 1)
size_mu_2 = size(mu, 2)
error('vanderpol_g: dt or mu is not a scalar')
end
if k == 1
gk = initial;
Gk = zeros(n, n);
else
gk = zeros(n, 1);
gk(1) = xk1(1) + xk1(2) * dt;
gk(2) = xk1(2) + (mu * (1 - xk1(1)*xk1(1)) * xk1(2) - xk1(1)) * dt;
%
Gk = zeros(n, n);
Gk(1,1) = 1;
Gk(1,2) = dt;
Gk(2,1) = (mu * (- 2 * xk1(1)) * xk1(2) - 1) * dt;
Gk(2,2) = 1 + mu * (1 - xk1(1)*xk1(1)) * dt;
end
return
end