Damped Harmonic Oscillator
This commit is contained in:
parent
94c8052e1b
commit
56908067f7
@ -57,8 +57,8 @@ legend("topleft", # coordinates, "topleft" etc
|
||||
plot(pend.sol$t,pend.sol$y[,1],type="l",col="blue",
|
||||
ylim=c(-2.3,2.3), xlab="time",ylab="amplitude")
|
||||
par(new=T)
|
||||
lines(seq(tmin,tmax,len=50),
|
||||
theta0*cos(sqrt(g/L)*seq(tmin,tmax,len=50)),type="l",col="red")
|
||||
lines(seq(tmin,tmax,len=length(pend.sol$t)),
|
||||
theta0*cos(sqrt(g/L)*seq(tmin,tmax,len=length(pend.sol$t))),type="l",col="red")
|
||||
abline(h=0)
|
||||
legend("topleft", # coordinates, "topleft" etc
|
||||
c("angle","small angle approx"), # label
|
||||
@ -75,19 +75,78 @@ tmax <- 10
|
||||
yo <- 1
|
||||
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
|
||||
m <- 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
|
||||
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
|
||||
m <- 1
|
||||
c <- 2
|
||||
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
|
||||
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
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user