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",
|
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
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user