diff --git a/Schrick-Noah_Homework-4.R b/Schrick-Noah_Homework-4.R index b1bb5c6..e605355 100644 --- a/Schrick-Noah_Homework-4.R +++ b/Schrick-Noah_Homework-4.R @@ -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