aboutsummaryrefslogtreecommitdiff
path: root/hw5/plz.jl
diff options
context:
space:
mode:
authorsotech117 <michael_foiani@brown.edu>2024-05-02 19:29:49 -0400
committersotech117 <michael_foiani@brown.edu>2024-05-02 19:29:49 -0400
commitc048f9f2219897ff3cc20a50d459911db3496a0a (patch)
tree59dd4883ddc1dcb75c67703ba9af93dfe2ac7b8a /hw5/plz.jl
parente650ed1e1e908e51c78c1b047bec0da7c4fea366 (diff)
major update, with final project rough draft code
Diffstat (limited to 'hw5/plz.jl')
-rw-r--r--hw5/plz.jl124
1 files changed, 62 insertions, 62 deletions
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)