diff options
author | sotech117 <michael_foiani@brown.edu> | 2024-05-02 19:33:11 -0400 |
---|---|---|
committer | sotech117 <michael_foiani@brown.edu> | 2024-05-02 19:33:11 -0400 |
commit | 95eb65429d24a897307601415c716e9042033982 (patch) | |
tree | c6a7cf8141eaae09fd16d64f9ffacae16bbab29a /t/plz.jl | |
parent | c048f9f2219897ff3cc20a50d459911db3496a0a (diff) |
update naming
Diffstat (limited to 't/plz.jl')
-rw-r--r-- | t/plz.jl | 767 |
1 files changed, 0 insertions, 767 deletions
diff --git a/t/plz.jl b/t/plz.jl deleted file mode 100644 index 962398a..0000000 --- a/t/plz.jl +++ /dev/null @@ -1,767 +0,0 @@ -function calculate_force( - left_pos, - middle_pos, - right_pos, - K, - alpha = 0.0, - beta = 0.0, -) - linear_force = K * (left_pos + right_pos - 2 * middle_pos) - quadratic_force = alpha * (left_pos - middle_pos)^2 + alpha * (right_pos - middle_pos)^2 - cubic_force = beta * (left_pos - middle_pos)^3 + beta * (right_pos - middle_pos)^3 - - return linear_force + quadratic_force + cubic_force -end - -function tendency!(du, u, params, t) - # unpack the params - N, modes, beta, A, dt, num_steps = params - - # get the positions and momenta - qs = u[1:2:end] - ps = u[2:2:end] - - num_masses = length(qs) - - # go over the points in the lattice and update the state - for i in 2:num_masses-1 - # left_index = max(1, i - 1) - # right_index = min(N, i + 1) - - du[i*2-1] = ps[i] - force = calculate_force(qs[i-1], qs[i], qs[i+1], 1, 0, beta) - du[i*2] = force - end - - # make last point same as first at rest - du[num_masses*2-1] = du[1] = 0 # set to 0 - du[num_masses*2] = du[2] = 0 - - # if ps[Int(N / 2)] / M >= 1 - # println("(in sim!) Time: ", t, " Vel: ", ps[Int(N / 2)] / M) - # # println("Other Positions: ", qs) - # println("Other Velocities: ", ps, "\n") - # end -end - -function get_initial_state( - N, - modes, - beta, - A, -) - state = zeros(N + 2) - 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 - -using DifferentialEquations -function run_simulation( - N, - modes, - beta, - A, - dt, - num_steps, -) - println("Running simulation with params: N=$N, modes=$modes, beta=$beta, A=$A, dt=$dt, num_steps=$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) - - # state above is position, need to add in momentum - s_0 = zeros(2 * (N + 2)) - for i in 1:length(state) - s_0[i*2-1] = state[i] - end - final_time = num_steps * dt - t_span = (0.0, final_time) - prob = ODEProblem(tendency!, s_0, t_span, params) - sol = solve(prob, Tsit5(), reltol = 1e-8, abstol = 1e-8, maxiters = 1e10) # control simulation - - return sol -end - -function get_pos_from_state(state) - return state[1:2:end] -end - -# Run the simulation -# N = 32 # number of masses -# beta = 2.3 # cubic string spring -# A = 10 # amplitude -# modes = 3 # number of modes to plot -# final_time = 100000 # seconds -# dt = 0.05 # seconds -# num_steps = Int(final_time / dt) -# params = (N, modes, beta, A, dt, num_steps) -# println("Running simulation with params: ", params) -# sol = run_simulation(N, modes, beta, A, dt, num_steps) -# states = sol.u -# timesteps = sol.t -# println("Final state: ", states[end]) - -# plot the inital positions and the final positions -using Plots -# init_pos = get_initial_state(N, 1, beta, A) -# final_pos = get_pos_from_state(states[end]) -# println("Initial: ", init_pos) -# println("Final: ", final_pos) -# plot(init_pos, label = "Initial", marker = :circle, xlabel = "Mass Number", ylabel = "Displacement", title = "First Three Modes") -# plot!(final_pos, label = "Final", marker = :circle) -# println("Saving initial-final-beta15.png") -# savefig("t/initial-final-beta-$beta.png") - -function animate_states(states, timesteps, from = 1, to = 1000) - println("\nAnimating states") - # animate the s array of positions - # find the timestep that maps to the state index - i_start = 1 - i_end = length(timesteps) - for i in 1:length(timesteps) - if timesteps[i] <= from - i_start = i - continue - end - if timesteps[i] >= to - i_end = i - break - end - end - - anim = @animate for i in i_start:i_end - s = get_pos_from_state(states[i]) - t = timesteps[i] - plot(s, label = "t = $t", marker = :circle, xlabel = "Mass Number", ylabel = "Displacement", ylim = (-3, 3)) - end - - mp4(anim, "t/animated-fpu.mp4", fps = 30) - println("Done animating, wrote to animated-fpu.mp4\n") -end -# animate_states(states, timesteps, 149500, 150000) - -function caluclate_energies_for_mode(states, mode) - N = length(states[1]) / 2 - 2 - - total = [] - kinetic = [] - potential = [] - - for i in 1:length(states) - total_energy = 0 - kinetic_energy = 0 - potential_energy = 0 - - # find a_k for this mode - poses = get_pos_from_state(states[i]) - a_k = 0 - for j in 1:length(poses) - a_k += poses[j] * sin((mode * (j - 1) * π) / (N + 1)) - end - amp = sqrt(2 / (N + 1)) - a_k *= amp - - # get the potenital energy - omega_k = 2 * sin((mode * π) / (2 * (N + 1))) - p = 0.5 * omega_k^2 * a_k^2 - - # find the kinetic energy - v_k = 0 - vels = states[i][2:2:end] - for j in 1:length(vels) - v_k += vels[j] * sin((mode * (j - 1) * π) / (N + 1)) - end - v_k *= amp - k = 0.5 * v_k^2 - - - total_energy += k + p - kinetic_energy += k - potential_energy += p - push!(total, total_energy) - push!(kinetic, kinetic_energy) - push!(potential, potential_energy) - end - return total, kinetic, potential -end - -function calculate_total_energy_by_state(states, timesteps) - total = [] - kinetic = [] - potential = [] - for i in 1:length(states) - vels = states[i][2:2:end] - k = 0.5 * sum(vels .^ 2) - - poses = get_pos_from_state(states[i]) - p = 0 - for j in 2:length(poses) - p += beta * (poses[j] - poses[j-1])^2 - end - - push!(total, k + p) - push!(kinetic, k) - push!(potential, p) - end - - # plot all three over time on the same plot - plot(timesteps, total, label = "Total Energy", xlabel = "Time", ylabel = "Energy", title = "Total Energy Over Time") - plot!(timesteps, kinetic, label = "Kinetic Energy") - plot!(timesteps, potential, label = "Potential Energy") - - return total, kinetic, potential -end - -function print_energies_for_modes(states, max_mode = 3, index = 1) - # get the sum of total energy over all mode - total = 0 - kinetic = 0 - potential = 0 - for i in 1:max_mode - t, k, p = caluclate_energies_for_mode(states, i) - total += t[index] - kinetic += k[index] - potential += p[index] - end - println("Total Energy: ", total) - println("Kinetic Energy: ", kinetic) - println("Potential Energy: ", potential) -end - -function plot_phase_space(states, mass_number, intersecting_mass = 4) - # get the positions and momenta - qs = [] - ps = [] - - for i in 2:length(states) - # only store if the other mass is crossing 0 - if (states[i-1][intersecting_mass*2-1] < 0 && states[i][intersecting_mass*2-1] > 0) || (states[i-1][intersecting_mass*2-1] > 0 && states[i][intersecting_mass*2-1] < 0) - s = states[i] - q = s[mass_number*2-1] - p = s[mass_number*2] - push!(qs, q) - push!(ps, p) - end - end - - s = scatter( - qs, - ps, - label = "Mass $mass_number", - xlabel = "Displacement", - ylabel = "Momentum", - title = "Phase Space for Masses when Mass $intersecting_mass crosses 0", - legend = :topleft, - marker = :circle, - markersize = 2, - xlim = (-1.5, 1.5), - ylim = (-1.5, 1.5), - ) - - # savefig(s, "t/phase-space-mass$mass_number-beta15.png") - - return s -end - -function analyze_energies_of_n_modes(modes::Array{Int}, states, timesteps, beta) - println("Analyzing energies of modes: ", modes) - - total_by_mode = Dict() - kinetic_by_mode = Dict() - potential_by_mode = Dict() - for j in modes - t, k, p = caluclate_energies_for_mode(states, j) - - total_by_mode[j] = t - kinetic_by_mode[j] = k - potential_by_mode[j] = p - end - - total_energy = [] - kinetic_energy = [] - potential_energy = [] - for i in 1:length(states) - total = 0 - kinetic = 0 - potential = 0 - - for j in modes - total += total_by_mode[j][i] - kinetic += kinetic_by_mode[j][i] - potential += potential_by_mode[j][i] - end - - push!(total_energy, total) - push!(kinetic_energy, kinetic) - push!(potential_energy, potential) - end - - # plot all three over time on the same plot - plot(timesteps, total_energy, label = "Total Energy", xlabel = "Time", ylabel = "Energy", title = "Total Energy Over Time") - plot!(timesteps, kinetic_energy, label = "Kinetic Energy") - plot!(timesteps, potential_energy, label = "Potential Energy") - savefig("t/procs/energies-modes-sum-beta-$beta.png") - println("Saved energies-modes-sum-beta-$beta.png. Summary Below:\n") - - # plot the energies for each mode over time - plt = plot(title = "Energy Over Time for Modes $(join(modes, ", "))", xlabel = "Time", ylabel = "Energy") - for mode in modes - plot!(plt, timesteps, total_by_mode[mode], label = "Mode $mode") - # plot!(plt, timesteps, kinetic_by_mode[mode], label = "Mode $mode Kinetic") - # plot!(plt, timesteps, potential_by_mode[mode], label = "Mode $mode Potential") - end - savefig(plt, "t/procs/energies-modes-separate-beta-$beta.png") - - # print the energies - println("Total Energy Initial: ", total_energy[1]) - println("Total Energy Final: ", total_energy[end]) - println("Kinetic Energy Initial: ", kinetic_energy[1]) - println("Kinetic Energy Final: ", kinetic_energy[end]) - println("Potential Energy Initial: ", potential_energy[1]) - println("Potential Energy Final: ", potential_energy[end], "\n") - - println("Done analyzing energies of modes: ", modes, "\n") - - return total_energy, kinetic_energy, potential_energy, total_by_mode, kinetic_by_mode, potential_by_mode -end - -function animate_masses_phase_space(states, mass_numbers, intersecting_mass = 4) - println("\nAnimating phase space for mass $mass_numbers when mass $intersecting_mass crosses 0") - # animate the s array of positions - # find the timestep that maps to the state index - anim = @animate for i in mass_numbers - s = plot_phase_space(states, i, intersecting_mass) - s - end - - mp4(anim, "t/animated-phase-space-masses-beta-$beta.mp4", fps = 24) -end - -function plot_mode_phase_space(states, mode_num, intersecting_mode, beta) - println("\nPlotting phase space for mode $mode_num") - - # convert the state to a mode - a_modes = [] - vel_modes = [] - a_inter_modes = [] - vel_inter_modes = [] - - N = length(states[1]) / 2 - 2 - - for i in 1:length(states) - a_mode = 0 - vel_mode = 0 - a_inter_mode = 0 - vel_inter_mode = 0 - - positions = states[i][1:2:end] - velocities = states[i][2:2:end] - for j in 2:length(positions)-1 - a_mode += positions[j] * sin((mode_num * (j - 1) * π) / (N + 1)) - vel_mode += velocities[j] * sin((mode_num * (j - 1) * π) / (N + 1)) - a_inter_mode += positions[j] * sin((intersecting_mode * (j - 1) * π) / (N + 1)) - vel_inter_mode += velocities[j] * sin((intersecting_mode * (j - 1) * π) / (N + 1)) - end - - amp = sqrt(2 / (N + 1)) - a_mode *= amp - vel_mode *= amp - a_inter_mode *= amp - vel_inter_mode *= amp - - if i == 1 - push!(a_inter_modes, a_inter_mode) - push!(vel_inter_modes, vel_inter_mode) - continue - end - - if ((a_inter_modes[end] < 0 && a_inter_mode > 0) || (a_inter_modes[end] > 0 && a_inter_mode < 0)) - push!(a_modes, a_mode) - push!(vel_modes, vel_mode) - end - push!(a_inter_modes, a_inter_mode) - push!(vel_inter_modes, vel_inter_mode) - end - - - # plot the phase space - scatter(a_modes, vel_modes, label = "Beta = $beta", xlabel = "Displacement", ylabel = "Momentum", - title = "Phase Space for Mode $mode_num when a_$intersecting_mode crosses 0", - xlim = (-10, 10), - ylim = (-1, 1), - color = :red, - legend = :topright, - ) - # savefig("t/frames/phase-space-mode-$mode_num-beta-$beta.png") - println("Saved phase-space-mode-$mode_num-beta-$beta.png") -end - -function animate_phase_space_plots_over_beta(betas, t_max, desired_mode, intersecting_mode) - N = 32 # number of masses - A = 10 # amplitude - modes = 3 # number of modes to plot - final_time = t_max # seconds - dt = 0.05 # seconds - num_steps = Int(final_time / dt) - - results = [] - for b in betas - s = run_simulation(N, modes, b, A, dt, num_steps) - states = s.u - timesteps = s.t - - push!(results, states) - - println("Simualted beta: ", b, " to t=", timesteps[end]) - end - - anim = @animate for i in 1:length(betas) - plot_mode_phase_space(results[i], desired_mode, intersecting_mode, betas[i]) - end - - mp4(anim, "t/animated-phase-space-modes-over-beta.mp4", fps = 15) -end - -# animate_phase_space_plots_over_beta(collect(0:0.025:4), 25000, 1, 3) - -# analyze_energies_of_n_modes([1, 3, 5, 7, 9, 11], timesteps) - -# animate_masses_phase_space(states, collect(2:N+1), 17) - -# plot_mode_phase_space(states, 1, 3) - -function estimate_lynapov_exponent(t_max, beta, jitter = 0.001) - println("Estimating Lynapov Exponent for beta: ", beta) - - N = 32 # number of masses - A = 10 # amplitude - modes = 3 # number of modes to plot - println("t_msx: ", t_max) - final_time = t_max # seconds - dt = 0.05 # seconds - num_steps = Int(final_time / dt) - - t_span = (0.0, final_time) - params = (N, modes, beta, A, dt, num_steps) - - # run a simulation with normal parameters - is = get_initial_state(N, 1, beta, A) - # plot iniital state - plot(is, label = "Initial State", marker = :circle, xlabel = "Mass Number", ylabel = "Displacement", title = "Initial Positions of Masses", markersize = 4) - is_0 = zeros(2 * (N + 2)) - for i in 1:length(is) - is_0[i*2-1] = is[i] - end - prob_s = ODEProblem(tendency!, is_0, t_span, params) - # solve so that the timestep is exactly set to dt - s = solve(prob_s, SSPRK33(), dt = dt) - states_control = s.u - timesteps = s.t - - - # run a simulation with a small perturbation - # dynamics!(state, prev_state, params, states) - # state above is position, need to add in momentum - is2 = get_initial_state(N, 1, beta, A) .* (1 - jitter) # perturb the initial state - # is2 = get_initial_state(N, 1, beta, A) .- jitter # perturb the initial state - plot!(is2, label = "Perturbed Initial State", marker = :cross, xlabel = "Mass Number", ylabel = "Displacement", title = "Perturbed Initial Positions of Masses", msw = 2) - savefig("t/new/inits-jitter.png") - s_0 = zeros(2 * (N + 2)) - for i in 1:length(is2) - s_0[i*2-1] = is2[i] - end - - # add random jitter to the initial state - # middle_index = Int(N / 2) * 2 - # s_0[middle_index] -= jitter # subtract a little from momenetum of middle particle - - final_time = num_steps * dt - t_span = (0.0, final_time) - prob = ODEProblem(tendency!, s_0, t_span, params) - sol = solve(prob, SSPRK33(), dt = dt) # perturbed simulation - state_perturbed = sol.u - time_perturbed = sol.t - - # println(time_perturbed .- timesteps, "\n") - - println("Finished simulations") - println("Control len: ", length(states_control), " Perturbed len: ", length(state_perturbed), " Time len: ", length(time_perturbed)) - - - # # print the difference in the two initial states - # println("Initial State Difference (pertrubed - control): ", state_perturbed[1] .- states_control[1]) - # println("Final State Difference (pertrubed - control): ", state_perturbed[end] .- states_control[end]) - - # plot the difference in the two states over time - differences = [] - for i in 1:length(state_perturbed) - # calculate mode 1 difference - a_k = 0 - amp = sqrt(2 / (N + 1)) - for j in 1:N - diff = abs(state_perturbed[i][j*2-1] - states_control[i][j*2-1]) - a_k += diff * sin((1 * (j - 1) * π) / (N + 1)) - end - a_k *= amp - push!(differences, a_k) - end - plot(time_perturbed, differences, label = "Difference in States", xlabel = "Time", ylabel = "Difference", title = "Absolute Difference in States Over Time", lw = 1.5, color = :blue) - savefig("t/frames/difference-in-states-beta-$beta.png") - # perform a linear regression on the log of the differences - # cut the data set into everythign after t=500 - # find the index where t = 500 - # index = 1 - # for i in 1:length(time_perturbed) - # if time_perturbed[i] >= 500 - # index = i - # break - # end - # end - # differences = differences[index:end] - # time_perturbed = time_perturbed[index:end] - ln_differeces = log.(differences) - (a, b) = linear_regression(time_perturbed, ln_differeces) - a = round(a, digits = 4) - b = round(b, digits = 4) - plot(time_perturbed, differences, label = "ln(difference in mode1)", xlabel = "Time", ylabel = "Difference", title = "Absolute Difference in States Over Time", msw = 0.0, yscale = :ln, color = :blue, lw = 1.5) - plot!(time_perturbed, exp.(a * time_perturbed .+ b), label = "exp($a*t + $b)", lw = 2, color = :red, linestyle = :dash) - savefig("t/frames/difference-in-states-beta-$beta-log.png") - - println("Saved difference-in-states-beta-$beta.png and difference-in-states-beta-$beta-log.png\n") - println("Lynapov Exponent: ", a) - - # check that solve doesn't explode - # animate_states(state_perturbed, time_perturbed, 0, 1) - return a -end - -# linear regression of the log of the difference -function linear_regression(x, y) - n = length(x) - x̄ = sum(x) / n - ȳ = sum(y) / n - a = sum((x .- x̄) .* (y .- ȳ)) / sum((x .- x̄) .^ 2) - b = ȳ - a * x̄ - return (a, b) -end - -function analyze_equiparition(t_max, beta) - # run a simulation with normal parameters - N = 32 # number of masses - A = 10 # amplitude - modes = 3 # number of modes to plot - final_time = t_max # seconds - dt = 0.05 # seconds - num_steps = Int(final_time / dt) - - t_span = (0.0, final_time) - params = (N, modes, beta, A, dt, num_steps) - s = run_simulation(N, modes, beta, A, dt, num_steps) - - states = s.u - timesteps = s.t - - analyze_energies_of_n_modes([1, 3, 5, 7], states, timesteps, beta) -end - -# my_beta = 0.3 -# estimate_lynapov_exponent(10000, my_beta, 0.001) -# analyze_equiparition(10000, my_beta) - -# function plot_betas_versus_lynapov_exponent(betas, t_max, jitter = 0.001) -# lynapovs = [] -# for b in betas -# lynapov = estimate_lynapov_exponent(t_max, b, jitter) -# push!(lynapovs, lynapov) -# end - -# plot(betas, lynapovs, label = "Lynapov Exponent", xlabel = "Beta", ylabel = "Lynapov Exponent", title = "Lynapov Exponent Over Beta") -# savefig("t/lynapov-over-beta.png") -# end - -function plot_probability_distrubtion_of_mode(energy_of_mode, total_energy, timesteps, beta) - # get the probability distribution of the mode - prob = [] - for i in 1:length(timesteps) - push!(prob, energy_of_mode[i] / total_energy[1]) # energy is conserved - end - - plot(timesteps, prob, label = "Probability of Mode 1", xlabel = "Time", ylabel = "Probability", title = "Probability of Mode 1 Over Time with beta=$beta", ylim = (0, 1)) - savefig("t/probability-mode1-beta-$beta.png") -end - -function analyze_probability_distribution_of_mode(t_max, beta) - # run a simulation with normal parameters - N = 32 # number of masses - A = 10 # amplitude - modes = 3 # number of modes to plot - final_time = t_max # seconds - dt = 0.05 # seconds - num_steps = Int(final_time / dt) - - t_span = (0.0, final_time) - params = (N, modes, beta, A, dt, num_steps) - s = run_simulation(N, modes, beta, A, dt, num_steps) - - states = s.u - timesteps = s.t - - # get the energies of the mode - total_energy, kinetic_energy, potential_energy, total_by_mode, kinetic_by_mode, potential_by_mode = analyze_energies_of_n_modes([1, 3, 5, 7, 9, 11, 13], states, timesteps, beta) - - # get the probability distribution of the mode - # plot_probability_distrubtion_of_mode(total_by_mode[1], total_energy, timesteps, beta) - - # print the time when the probability gets lower than .5 - for i in 1:length(timesteps) - if (total_by_mode[1][i] / total_energy[1]) < 0.6 - println("TIME when probability of mode 1 is less than 0.6 for beta=$beta: ", timesteps[i]) - return timesteps[i] - end - end - - return -1 -end - -# estimate_lynapov_exponent(1000, 0.3, 0.001) - -function plot_pos_at_time_t(t, beta) - # run a simulation with normal parameters - N = 32 # number of masses - A = 10 # amplitude - modes = 3 # number of modes to plot - final_time = t # seconds - dt = 0.05 # seconds - num_steps = Int(final_time / dt) - - t_span = (0.0, final_time) - params = (N, modes, beta, A, dt, num_steps) - s = run_simulation(N, modes, beta, A, dt, num_steps) - - states = s.u - timesteps = s.t - positions = s.u[end][1:2:end] - inital_positions = s.u[1][1:2:end] - - plot(positions, label = "Positions at t=$t", xlabel = "Mass Number", ylabel = "Displacement", title = "Positions of Masses at t=$t, beta=$beta", lw = 2, marker = :circle) - plot!(inital_positions, label = "Initial Positions", lw = 2, marker = :circle) - savefig("t/new/positions-at-t-$t-beta-$beta.png") -end - -function get_breakdown_time(beta, t_find = 3600) - t = analyze_probability_distribution_of_mode(t_find, beta) - if t == -1 - println("Could not find time for beta: ", beta) - return -1 - end - return t -end - - -# plot_pos_at_time_t(1000, 10) -# plot_pos_at_time_t(1000, 0) - - - -# plot_betas_versus_lynapov_exponent(collect(0:1:50), 1000, 0.001) - -# analyze_probability_distribution_of_mode(100000, 2.0) - -# break_down_times = [] -# bs = collect(1:0.5:50) -# for b_s in bs -# t_find = 3600 -# t = analyze_probability_distribution_of_mode(t_find, b_s) -# if t == -1 -# println("Could not find time for beta: ", b_s) -# continue -# end -# push!(break_down_times, t) -# end -# # plot beta vs breakdown time -# plot(bs, break_down_times, label = "Breakdown Time", xlabel = "Beta", ylabel = "Time", title = "Breakdown Time Over Beta") -# savefig("t/breakdown-time-over-beta.png") - -# # plot the log of this -# one_over_breakdown_time = break_down_times .^ (-1) -# (a, b) = linear_regression(bs, one_over_breakdown_time) -# a = round(a, digits = 4) -# b = round(b, digits = 4) -# plot(bs, one_over_breakdown_time, label = "1 / (breakdown time)", xlabel = "Beta", ylabel = "1 / (breakdown time)", title = "Breakdown Time ^ -1 Over Beta", msw = 0.0, color = :blue, lw = 1.5) -# plot!(bs, a * bs .+ b, label = "1 / t = $a * beta + $b", lw = 2, color = :red, linestyle = :dash) -# savefig("t/ln-breakdown-time-over-beta.png") - -# println("Done!") -# # for a range of betas, find the breakdown time and the lynapov exponent -function tmp(betas) - break_down_times = [] - lynapovs = [] - t_find = 350000 - for b in betas - # if b < 0.5 - # t_find = 10000 - # end - t = get_breakdown_time(b, t_find) - if t == -1 - continue - end - t_find = round(Int, t) + 100 - - l = estimate_lynapov_exponent(t_find, b, 0.001) - if l == 0 - println("Lynapov for beta was zero: ", b) - continue - end - push!(break_down_times, t) - push!(lynapovs, l) - end - - # plot lynapov vs breakdown time - scatter(break_down_times, lynapovs, label = "Lynapov Exponent", xlabel = "Breakdown Time", ylabel = "Lynapov Exponent", title = "Lynapov Exponent Over Breakdown Time") - savefig("t/new/new-lynapov-over-breakdown-time.png") - - # plot this over log of lynapovs - ln_lynapovs = log.(lynapovs) - ln_break_down_times = log.(break_down_times) - (a, b) = linear_regression(ln_break_down_times, ln_lynapovs) - a = round(a, digits = 4) - b = round(b, digits = 4) - scatter(ln_break_down_times, ln_lynapovs, label = "ln(Lynapov Exponent)", xlabel = "ln(Breakdown Time)", ylabel = "ln(Lynapov Exponent)", title = "ln(Lynapov Exponent) Over ln(Breakdown Time)", msw = 0.0, color = :blue, lw = 1.5) - plot!(ln_break_down_times, a * ln_break_down_times .+ b, label = "ln(beta) = $a * ln(t) + $b", lw = 2, color = :red, linestyle = :dash) - savefig("t/new/new-ln-lynapov-over-breakdown-time.png") - - # only one log - (a, b) = linear_regression(lynapovs, ln_break_down_times) - a = round(a, digits = 4) - b = round(b, digits = 4) - scatter(lynapovs, ln_break_down_times, label = "ln(Breakdown Time)", xlabel = "Lynapov Exponent", ylabel = "ln(Breakdown Time)", title = "ln(Breakdown Time) Over Lynapov Exponent", msw = 0.0, color = :blue, lw = 1.5) - plot!(lynapovs, a * lynapovs .+ b, label = "ln(t) = $a * beta + $b", lw = 2, color = :red, linestyle = :dash) - savefig("t/new/new-new-ln-breakdown-time-over-lynapov.png") - - - - # plot the lynapoovs to the ^-1 - one_over_breakdown_time = break_down_times .^ (-1) - (a, b) = linear_regression(lynapovs, one_over_breakdown_time) - a = round(a, digits = 4) - b = round(b, digits = 4) - scatter(lynapovs, one_over_breakdown_time, label = "1 / (breakdown time)", xlabel = "Lynapov Exponent", ylabel = "1 / (breakdown time)", title = "1 / (breakdown time) Over Lynapov Exponent", msw = 0.0, color = :blue, lw = 1.5) - plot!(lynapovs, a * lynapovs .+ b, label = "1 / t = $a * beta + $b", lw = 2, color = :red, linestyle = :dash) - savefig("t/new/new-one-over-lynapov-over-breakdown-time.png") - - # plot the lynapov over betas - scatter(betas, lynapovs, label = "Lynapov Exponent", xlabel = "Beta", ylabel = "Lynapov Exponent", title = "Lynapov Exponent Over Beta") - savefig("t/new/new-lynapov-over-beta.png") -end - -tmp(collect(0.3:0.025:10)) - -# estimate_lynapov_exponent(500000, 0.3, 0.001) |