Damped Harmonic Oscillator

This commit is contained in:
Noah L. Schrick 2023-03-01 13:13:13 -06:00
parent 94c8052e1b
commit 56908067f7

View File

@ -57,8 +57,8 @@ legend("topleft", # coordinates, "topleft" etc
plot(pend.sol$t,pend.sol$y[,1],type="l",col="blue", plot(pend.sol$t,pend.sol$y[,1],type="l",col="blue",
ylim=c(-2.3,2.3), xlab="time",ylab="amplitude") ylim=c(-2.3,2.3), xlab="time",ylab="amplitude")
par(new=T) par(new=T)
lines(seq(tmin,tmax,len=50), lines(seq(tmin,tmax,len=length(pend.sol$t)),
theta0*cos(sqrt(g/L)*seq(tmin,tmax,len=50)),type="l",col="red") theta0*cos(sqrt(g/L)*seq(tmin,tmax,len=length(pend.sol$t))),type="l",col="red")
abline(h=0) abline(h=0)
legend("topleft", # coordinates, "topleft" etc legend("topleft", # coordinates, "topleft" etc
c("angle","small angle approx"), # label c("angle","small angle approx"), # label
@ -75,19 +75,78 @@ tmax <- 10
yo <- 1 yo <- 1
ybaro <- 0 ybaro <- 0
## Substitution Tricks
# y1 = y_prime
# y_2 = y
# y_1_prime = y_pp
# y_2_prime = y_prime = y_1
# Eqs:
# m*y_1_prime + c*y1 + k*y_2 = 0
# y_1_prime = (-c*y_1 - k*y_2)/m
# y_2_prime = y_1
# a # a
m <- 1 m <- 1
c <- 1 c <- 1
k <- 2 kvar <- 2
dho.f <- function(t, y, kpass){
yn <- y[1]
ydot <- y[2]
# c k m
ypp <- (-kpass[2]*yn - kpass[3]*ydot)/kpass[1]
#ypp <- -kpass[2]*y - kpass[3]*ydot
as.matrix(c(ydot,ypp))
}
y.init <- c(yo, ybaro)
dho.params <- c(m,c,kvar)
dho.sol <- ode45(f=function(t,y){dho.f(t,y,kpass=dho.params)},
y=y.init, t0=tmin, tfinal=tmax)
# plot pos vs time # plot pos vs time
pos <- (-m*dho.sol$y[,2] - c*dho.sol$y[,1])/kvar
plot(dho.sol$t, pos ,type="o",col="blue",
ylim=c(-1.0,1.0), xlab="time",ylab="amplitude")
par(new=T)
lines(dho.sol$t,dho.sol$y[,1],type="o",col="red")
lines(dho.sol$t,dho.sol$y[,2],type="o",col="green")
legend("topright", # coordinates, "topleft" etc
c("y","yprime", "ydoubleprime"), # label
lty=c(1,1), # line
lwd=c(2.5,2.5), # weight
#cex=.8,
bty="n", # no box
col=c("blue","red", "green") # color
)
# b # b
m <- 1 m <- 1
c <- 2 c <- 2
k <- 1 k <- 1
dho.params <- c(m,c,k)
y.init <- c(yo, ybaro)
dho.params <- c(m,c,kvar)
dho.sol <- ode45(f=function(t,y){dho.f(t,y,kpass=dho.params)},
y=y.init, t0=tmin, tfinal=tmax)
# plot pos vs time # plot pos vs time
pos <- (-m*dho.sol$y[,2] - c*dho.sol$y[,1])/kvar
plot(dho.sol$t, pos ,type="o",col="blue",
ylim=c(-1.0,1.0), xlab="time",ylab="amplitude")
par(new=T)
lines(dho.sol$t,dho.sol$y[,1],type="o",col="red")
lines(dho.sol$t,dho.sol$y[,2],type="o",col="green")
legend("topright", # coordinates, "topleft" etc
c("y","yprime", "ydoubleprime"), # label
lty=c(1,1), # line
lwd=c(2.5,2.5), # weight
#cex=.8,
bty="n", # no box
col=c("blue","red", "green") # color
)
## 3. Use ode45/rk4sys to solve for the traj of a projectile thrown vertically ## 3. Use ode45/rk4sys to solve for the traj of a projectile thrown vertically