From c048f9f2219897ff3cc20a50d459911db3496a0a Mon Sep 17 00:00:00 2001 From: sotech117 Date: Thu, 2 May 2024 19:29:49 -0400 Subject: major update, with final project rough draft code --- hw5/plz.jl | 124 ++++++++++++++++++++++++++++++------------------------------- 1 file changed, 62 insertions(+), 62 deletions(-) (limited to 'hw5') diff --git a/hw5/plz.jl b/hw5/plz.jl index d4abcbd..7e50e4f 100644 --- a/hw5/plz.jl +++ b/hw5/plz.jl @@ -1,73 +1,73 @@ function dynamics!( - state, - prev_state, - params, - states + state, + prev_state, + params, + states, ) - # Unpack the parameters - N, modes, beta, A, dt, num_steps = params - - for i in 1:num_steps - next_state = zeros(N) - - # update the left particle (set to rest) - state[1] = 0 - - # update the right particle (set to rest) - state[N] = 0 - - # update the middle particles - for i in 2:N-1 - a = 2 * state[i] - prev_state[i] - b = dt * dt * (state[i + 1] - 2 * state[i] + state[i - 1]) - c = dt * dt * beta * ((state[i + 1] - state[i])^3 + (state[i - 1] - state[i])^3) - next_state[i] = a + b + c - end - - push!(states, next_state) - - # update the previous state - for i in 1:N - prev_state[i] = state[i] - end - # update the current state - for i in 1:N - state[i] = next_state[i] - end - end + # Unpack the parameters + N, modes, beta, A, dt, num_steps = params + + for i in 1:num_steps + next_state = zeros(N) + + # update the left particle (set to rest) + state[1] = 0 + + # update the right particle (set to rest) + state[N] = 0 + + # update the middle particles + for i in 2:N-1 + a = 2 * state[i] - prev_state[i] + b = dt * dt * (state[i+1] - 2 * state[i] + state[i-1]) + c = dt * dt * beta * ((state[i+1] - state[i])^3 + (state[i-1] - state[i])^3) + next_state[i] = a + b + c + end + + push!(states, next_state) + + # update the previous state + for i in 1:N + prev_state[i] = state[i] + end + # update the current state + for i in 1:N + state[i] = next_state[i] + end + end end function get_initial_state( - N, - modes, - beta, - A + N, + modes, + beta, + A, ) - state = zeros(N) - amp = A * sqrt(2 / (N - 1)) - for i in 2:N-1 - state[i] = amp * sin((modes * π * (i - 1)) / (N - 1)) - end - return state + state = zeros(N) + amp = A * sqrt(2 / (N - 1)) + for i in 2:N-1 + state[i] = amp * sin((modes * π * (i - 1)) / (N - 1)) + end + return state end function run_simulation( - N, - modes, - beta, - A, - dt, - num_steps + N, + modes, + beta, + A, + dt, + num_steps, ) - states = [] - state = get_initial_state(N, 1, beta, A) - prev_state = zeros(N) - for i in 1:N - prev_state[i] = state[i] - end - params = (N, modes, beta, A, dt, num_steps) - dynamics!(state, prev_state, params, states) - return states + states = [] + state = get_initial_state(N, 1, beta, A) + prev_state = zeros(N) + for i in 1:N + prev_state[i] = state[i] + end + params = (N, modes, beta, A, dt, num_steps) + dynamics!(state, prev_state, params, states) + return states end # Run the simulation @@ -76,7 +76,7 @@ beta = 1.5 # cubic string spring A = 10 # amplitude modes = 3 # number of modes to plot final_time = 50 # seconds -dt = .5 # seconds +dt = 0.5 # seconds num_steps = Int(final_time / dt) params = (N, modes, beta, A, dt, num_steps) s = run_simulation(N, modes, beta, A, dt, num_steps) @@ -89,7 +89,7 @@ using Plots # animate the s array of positions anim = @animate for i in 1:length(s) - plot(s[i], label="t = $(i * dt)", marker=:circle, xlabel="Mass Number", ylabel="Displacement", ylim=(-3, 3)) + plot(s[i], label = "t = $(i * dt)", marker = :circle, xlabel = "Mass Number", ylabel = "Displacement", ylim = (-3, 3)) end gif(anim, "plz.gif", fps = 30) -- cgit v1.2.3-70-g09d2