---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
Second-order differential equations
 
# It is convenient to use WolframAlpha to find the solutions, and then R to plot their
# charts.  In any case, with R I can check the solutions.
#
# A car that is moving with a constant acceleration of 5 m/s^2 and has a speed of 1 m/s
# at a time when it is 2 m from a reference point.
# With WolframAlpha:  f"(x)=5, f'(0)=1, f(0)=2
# I obtain:  f(x) = 5*x^2/2+x+2.    The graph with R:
f = function(x) 5*x^2/2+x+2; graphF(f, 0,20, "brown")
  
# The check
df = function(x) eval(deriv(f,"x"))
deriv2(f,"x"); df(0); f(0)
#     5        1      2
#
# Second example. x = time, y = position of an object of mass m subjected to force
# -k*y by a spring, with k = 4, m = 1. F = m*y"(t) ->  y"(x) = -4/1*y(x).
# With WolframAlpha. I obtain  y(x) = c2*sin(2*x)+c1*cos(2*x).
# If I put y"(x) = -4*y(x), y(0)=2, y'(0)=0 I obtain: y(x) = 2*cos(2*x) and the graphs:
     
# The check with R
f = function(x) 2*cos(2*x)
df = function(x) eval(deriv(f,"x")); d2f = function(x) eval(deriv2(f,"x"))
F = function(x) d2f(x)+4*f(x); x=1:5; F(x)
#   0 0 0 0 0
f(0); df(0)
# 2    0
# The graph with  R:
graph2F(f, 0,20, "brown")
  
# Or:
TICKx=pi/2; TICKy=1/2; Plane2(0,20, -2,2)
graph2(f, 0,20, "brown")
underY(-1,-1); underY(1,1); underY(-2,-2); underY(2,2); underY(0,0)
underX(bquote(2*pi),2*pi); underX(bquote(4*pi),4*pi); underX(bquote(6*pi),6*pi)
underX(0,0)
  
#
# How to trace the phase curve, ie the curve (y(x),y'(x)) [the relationship between
# "y" and its "speed"]?
df = function(x) eval(deriv(f,"x"))
# Where does df change?
x=seq(0,20,0.1); c(min(df(x)),max(df(x)))
# -3.999647  3.999961
Plane(-2,2, -4,4)
param(f,df, 0,20, "brown")
                   
# In this case, as a phase diagram I get an ellipse: the solution is periodic
#
# Third example. Forced oscillations, with external oscillating force F·cos(Ω·t):
# y" = -(k/m)·y + F/m·cos(Ω·t). Consider the following case: F=1, Ω=2
# and the other data as above:  y"(x)=-4*y(x)+cos(2*x), y(0)=2, y'(0)=0
# With WolframAlpha I obtain  2*cos(2*x)+1/4*x*sin(2*x)  and the graphs:
      
# The check with R
f = function(x) 2*cos(2*x)+1/4*x*sin(2*x)
df = function(x) eval(deriv(f,"x")); d2f = function(x) eval(deriv2(f,"x"))
F = function(x) d2f(x)+4*f(x)-cos(2*x); x=1:5; F(x)
#   -6.106227e-16  1.110223e-16  3.330669e-16  1.110223e-16 -1.110223e-16  Practically 0
f(0); df(0)
# 2    0
# The graph:
graph2F(f, 0,30, "brown")
 
               
# The phase curve
df = function(x) eval(deriv(f,"x"))
# Where does df change?
x=seq(0,30,0.1); c(min(df(x)),max(df(x)))
# -15.30207  14.49992
Plane(-8,8, -15,15); param(f,df, 0,30, "brown")

               
 
# For these values of F and Ω there is the phenomenon of resonance (oscillations
# increase in amplitude).
#
# Fourth example. Damped  oscillations, with  y" = -(k/m)·y - k1·y' (with frictional
# force proportional to speed). Example with  k1 = 1
# y"(x) = -4*y(x)-y'(x), y(0)=1, y'(0)=3
# With WolframAlpha::
# y(x) = 1/15*exp(-x/2)*(7*sqrt(15)*sin((sqrt(15)*x)/2)+15*cos((sqrt(15)*x)/2))
                
# With R:
S = sqrt(15)
f = function(x) 1/15*exp(-x/2)*(7*S*sin((S*x)/2)+15*cos((S*x)/2))
graph2F(f, 0,20, "brown")
df = function(x) eval(deriv(f,"x"))
x=seq(0, 20, 0.1); c(min(df(x)),max(df(x)))
#  -2.307363  3.000000
Plane(-1,2, -3,3); para(f,df, 0,20, "brown")
 
   

Other examples of use