function [T,Y] = oderk4(funname, tspan, y) dt = 0.1; T = []; Y = []; T = [T tspan(1)]; Y = [Y y]; for t = tspan(1):dt:tspan(2)-dt dt2 = dt/2.0; dt6 = dt/6.0; xt = t + dt2; dydt = feval(funname, t, y); tmpy = y + dt2 * dydt; dy4 = feval(funname, xt, tmpy); tmpy = y + dt2 * dy4; dy3 = feval(funname, xt, tmpy); tmpy = y + dt * dy3; dy3 = dy3 + dy4; dy4 = feval(funname, t + dt, tmpy); y = y + dt6 * (dydt + dy4 + 2.0*dy3); T = [T t+dt]; Y = [Y y]; end
function dy=vdp1(t,y) dy=[y(2);(1-y(1)^2)*y(2)-y(1)];
[T, Y]=oderk4(@vdp1,[0,30],[2;0]);
plot(T,Y(1,:),'-',T,Y(2,:),'--'); title('Solution of van der Pol Equation, mu=1'); xlabel('time t'); ylabel('solution y'); legend('y1','y2');