I’m trying to generate a phase portrait for a system of coupled ordinary differential equations (ODEs) using Python’s scipy.integrate.solve_ivp. The system models the frequency of cooperators (x) and the multiplication of cooperators (r_c) in an evolutionary game theory context with a time-dependent environment w(t) .However, my output graph does not match the expected phase portrait, particularly in terms of convergence and the shape of the cyclic region.
Equations and Parameters
It's a coupled ode equation of the system
where : w(t) = 1 - 0.5 * sin ( a*t + delta)
parameters : N = 4 , r_d = 0.6 , epchilon = 6 , alpha = 1.5 , beta = 3.5 , theta = 0.1 , delta = - pie / 2
Expected Output Expected graph
Actual Output My output graph
Code
Here’s my complete code:
import matplotlib.pyplot as plt
from scipy.integrate import solve_ivp
# Parameters
N = 4
rd = 0.6
epsilon = 6
alpha = 1.5
beta = 3.5
theta = 0.5
a = 0.1
delta = -np.pi / 2
# Time-dependent w2 function
def w2(t):
return 1 - 0.5 * np.sin(a * t + delta)
# Define the system of ODEs
def coupled_system(t, state):
x, rc = state
w = w2(t) # Time-dependent w2
common_term1 = ((w * (w * x - x + 1) ** (N - 1)) - 1) / (N * (w - 1))
common_term2 = (((w * x - x + 1) ** (N - 1)) - 1) / (N * (w - 1))
dx_dt = x * (1 - x) * ((rc * common_term1) - 1 - (rd * common_term2))
drc_dt = epsilon * (rc - alpha) * (beta - rc) * (-x * ((rc * common_term1) - 1) + rd * theta * (1 - x) * common_term2)
return [dx_dt, drc_dt]
# Time span
t_span = (0, 50)
t_eval = np.linspace(*t_span, 1000)
# Increase initial conditions density
x0_vals = np.linspace(0.00, 1.00, 30) # More starting points
rc0_vals = np.linspace(1.50, 3.50, 30)
# Store trajectories for different initial conditions
trajectories = []
for x0 in x0_vals:
for rc0 in rc0_vals:
sol = solve_ivp(coupled_system, t_span, [x0, rc0], t_eval=t_eval,rtol=1e-6,atol=1e-9)
trajectories.append(sol)
# Plot trajectories with improved color coding and smoothing
plt.figure(figsize=(8, 6))
for sol in trajectories:
x_traj, rc_traj = sol.y
final_x, final_rc = x_traj[-1], rc_traj[-1]
# Color classification based on the final state
if final_x < 0.001: # Extinct cooperators
color = '#1034a6'
elif final_x > 0.80 and abs(final_rc - alpha) < 0.3 : # Full cooperation
color = '#FF1493' # Deep Pink
else: # Cyclic behavior
color = 'orange'
plt.plot(x_traj, rc_traj, color=color, linewidth=0.5)
plt.xlabel("Frequency of Cooperators, x")
plt.ylabel("Multiplication of Cooperators, r_c")
plt.title("Phase Portrait of the System")
plt.xlim([0.0, 1.0])
plt.ylim([1.5, 3.5])
plt.show()
Questions
Why is my phase portrait not matching the expected graph? Specifically:
1.Why do the pink trajectories converge to r_c = 2.0 - 2.5 instead of r_c = 1.5
2.Why is the cyclic region (orange trajectories) too elongated and not compact?
发布者:admin,转转请注明出处:http://www.yc00.com/questions/1744278252a4566439.html
评论列表(0条)