Duffing-Oscillator-1

Sat 17 May 2025

from bokeh.plotting import figure, output_file, show
from bokeh.io import output_notebook
from bokeh.models import ColumnDataSource
# Set Bokeh output to notebook
output_notebook()
Loading BokehJS ...
import numpy as np
from scipy.integrate import odeint
from bokeh.plotting import figure, show

# Duffing oscillator parameters
alpha = -1
beta = 1
delta = 0.2
gamma = 0.3
omega = 1.2

# Duffing system function
def duffing(state, t):
    x, y = state
    x_dot = y
    y_dot = -delta * y - alpha * x - beta * x**3 + gamma * np.cos(omega * t)
    return [x_dot, y_dot]

# Initial conditions and time steps
initial = [1, 0]
t = np.linspace(0, 100, 10000)

# Solve Duffing oscillator equations
solution = odeint(duffing, initial, t)
x = solution[:, 0]
y = solution[:, 1]

# Split data into segments for multi-line
num_segments = 7
xs = np.array_split(x, num_segments)
ys = np.array_split(y, num_segments)

# Define a color palette
colors = ["#FFEDA0", "#FED976", "#FEB24C", "#FD8D3C", "#FC4E2A", "#E31A1C", "#BD0026"]

# Create the Bokeh figure
p = figure(title="Duffing Oscillator Visualization",
           background_fill_color="#f9f9f9",
           x_axis_label="X",
           y_axis_label="Y")

# Add the multi_line glyph
p.multi_line(xs, ys, line_color=colors, line_alpha=0.8, line_width=1.5)

# Show the plot
show(p)


Score: 5

Category: bokeh