Matlab source code nma_project_511.m.txt

## Solving nonlinear ODE (Van Der Pol) numerically using Matlab’s ODE45

January 30, 2024   Compiled on January 30, 2024 at 4:41am

### 1 Introduction

Report for course EGME 511 (Advanced Mechanical Vibration). California state university, Fullerton, CA. Van der Pol diﬀerential equation is given by $x^{\prime \prime }\left ( t\right ) -c\left ( 1-x^{2}\left ( t\right ) \right ) x^{\prime }\left ( t\right ) +kx\left ( t\right ) =0$ In this analysis, we will consider the case only for positive $$c,k$$.  The above equation will be solved numerically using Matlab’s ODE45 for diﬀerent initial conditions, and the phase portrait (velocity vs. displacement) is plotted to show the limit cycle for diﬀerent initial conditions.

### 2 Matlab implementation

To use ODE45, one must ﬁrst convert the above second order ODE to two ODE’s, each of which is ﬁrst order. Letting $$x_{1}=x, x_{2}=x^{\prime }(t)$$ results in

$\left . \begin {array} [c]{c}x_{1}=x\\ x_{2}=x^{\prime }\left ( t\right ) \end {array} \right \} \left . \begin {array} [c]{c}x_{1}^{\prime }=x^{\prime }\left ( t\right ) =x_{2}\\ x_{2}^{\prime }=x^{\prime \prime }\left ( t\right ) =c\left ( 1-x^{2}\right ) x^{\prime }\left ( t\right ) -kx\left ( t\right ) \end {array} \right \} \left . \begin {array} [c]{c}x_{1}^{\prime }=x_{2}\\ x_{2}^{\prime }=c\left ( 1-x_{1}^{2}\right ) x_{2}-kx_{1}\end {array} \right \}$

The system of equations to be solved by ODE45 is the following

$\begin {pmatrix} x_{1}^{^{\prime }}\\ x_{2}^{^{\prime }}\end {pmatrix} =\begin {pmatrix} x_{2}\\ c\left ( 1-x_{1}^{2}\right ) x_{2}-kx_{1}\end {pmatrix}$

Subject to initial conditions $$x_{1}(0) =x(0)$$ and $$x_{2}(0) = x^{\prime }(0)$$. In the Matlab implementation below, the values of $$c,k$$ and the initial conditions are deﬁned at the top of the code. This needs to be modiﬁed to change the initial conditions before running the program again.

### 3 Results and output

The program was run for a number of diﬀerent initial conditions (diﬀerent $$x\left ( 0\right )$$ and diﬀerent $$v\left ( 0\right )$$). In all cases, $$c=1,k=1$$ was used. It is noticed that one limit cycle is reached in all cases. Both the $$x\left ( t\right )$$ and the phase plot where shown. The following are output from 3 diﬀerent runs made. The title on the plots show the initial conditions used.

### 4 Conclusion

A non-linear second order ODE was solved numerically using Matlab’s ode45. The solution to the Van Der Pol was found to contain a limit cycle in the phase portrait when starting from any initial conditions.

### 5 Source code

function nma_project_511()
% This function solves the Van Der Pol nonlinear ode
% numerically using Matlab's ode45.
%
% Final project for 511, CSUF, spring 2009. Instructor: Dr Oh, Sang June
%
% Written by : Nasser M. Abbasi
% Van Der Pol ode is  x''(t) - c (1-x^2(t)) x'(t) + k x(t) = 0

t  = 0:0.001:100;   % time scale
c  = 1;
k  = 1;
x0 = 10;
v0 = 3;

[t,x] = ode45( @rhs, t, [x0,v0]);

subplot(2,1,1);
plot(t,x(:,1));
xlabel('t'); ylabel('x(t)');
title(sprintf('Van Der Pol, position vs, time, c=%3.2f, k=%3.2f',c,k));

subplot(2,1,2);
plot(x(:,1),x(:,2));
xlabel('x(t)'); ylabel('v(t)');
hold on;
plot(x0,v0,'*r','MarkerSize',10);
title(sprintf('Phase portait showing limit cycle. x(0)=%3.2f, v(0)=%3.2f',x0,v0));
axis equal
hold off;

function dxdt=rhs(t,x)
dxdt_1 = x(2);
dxdt_2 = c*(1-x(1)^2)*x(2)-k*x(1);

dxdt = [dxdt_1 ; dxdt_2];
end
end