Hello everyone,
%% Init clear variables close all clc %% Code % define parameters lambda = 3; % damping coefficient % f = 0.8; % [hz] % Frequency % w = 2*pi*f; % ~ 5[rad/sec] % natural frequency w = 0.8; % natural frequency a = 1; % nonlinearity parameter y = @(t) 0; m = 90; % define equation f = @(t,x) [x(2); -lambda*(x(2)^2 + x(1)^2 - a)*x(2) - w^2*x(1) + y(t)]; % initial conditions x0 = [3;-1]; % time span tspan = [0 100]; % solve using ode45 [t,x] = ode45(f, tspan, x0); % compute acceleration xpp = -lambda*(x(:,2).^2 + x(:,1).^2 - a).*x(:,2) - w^2.*x(:,1) + y(t); % plot solution figure; plot(t, xpp(:,1), 'b', 'LineWidth', 1.5); xlim([40 50]) xlabel('t'); ylabel('xpp'); title('Acceleration of a Van der Pol Oscillator'); grid on
<
NOTE:-
f = @(t,x) [x(2); -lambda*(x(2)^2 + x(1)^2 - a)*x(2) - w^2*x(1)]; (1)
where the y(t) term was taken away since it was set to 0 anyway. Rather than anonymous functions, there are two functions defined at the bottom of the script code below. The relevant line for the time derivatives is
dxy = [x(2); (-lam1*x(2)^2 -lam2*x(1)^2 +lam3*a)*x(2) - w^2*x(1)]
which is the same except there are three adjustable lambda values instead of just one. Suppose you start with (1) and want to speed up the waveform by a factor of b and change its size by a factor of A, all the while keeping the same shape. This can be done with
lam1 = lambda/(b*A^2); lam2 = lambda*b/A^2; lam3 = lambda*b; and w --> w*b
If you speed up a waveform by a factor of b, then the acceleration goes up by a factor of b^2. The reason for A is that if you want to keep the acceleration the same as before, you can correct by a factor of A = 1/b^2. Or of course you can set the acceleration to any size, within reason.
The initial conditions should really be adjusted to get exact agreement for short times, but I left that alone because the solution settles down pretty quickly.
Comments
Post a Comment