import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
# Define parameters
a1 = 2.0 # Growth rate of tumor cells
a2 = 0.5 # Growth rate of hunting cells
a3 = 0.1 # Death rate of hunting cells
a4 = 1.0 # Growth rate of resting cells
a5 = 0.1 # Interaction term between hunting and resting cells
a6 = 0.1 # Death rate of resting cells
w1 = 0.5 # Half-saturation constant for tumor cells
w2 = 0.5 # Half-saturation constant for hunting cells
k1 = 0.5 # Feedback control coefficient for tumor cells
k2 = 0.1 # Feedback control coefficient for hunting cells
k3 = 0.1 # Feedback control coefficient for resting cells
# Define the system of equations
def model(y, t):
x1, x2, x3 = y
dx1dt = 1 + a1 * x1 * (1 - x1) - (x1 * x2) / (w1 + x1) - k1 * x1
dx2dt = (a2 * x2 * x3) / (w2 + x3) - a3 * x2 + k2 * x2
dx3dt = a4 * x3 * (1 - x3) - (a5 * x2 * x3) / (w2 + x3) - a6 * x3 + k3 * x3
return [dx1dt, dx2dt, dx3dt]
# Initial conditions: [tumor cells, hunting cells, resting cells]
initial_conditions = [0.1, 0.5, 0.5]
# Time points where solution is computed
t = np.linspace(0, 50, 500)
# Solve ODEs
solution = odeint(model, initial_conditions, t)
# Plot the results
plt.figure(figsize=(10, 6))
plt.plot(t, solution[:, 0], label='Tumor Cells (x1)', color='r')
plt.plot(t, solution[:, 1], label='Hunting Cells (x2)', color='g')
plt.plot(t, solution[:, 2], label='Resting Cells (x3)', color='b')
plt.title('Feedback System Dynamics')
plt.xlabel('Time')
plt.ylabel('Cell Population')
plt.legend()
plt.grid()
plt.show()
aW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKZnJvbSBzY2lweS5pbnRlZ3JhdGUgaW1wb3J0IG9kZWludAoKIyBEZWZpbmUgcGFyYW1ldGVycwphMSA9IDIuMCAgICMgR3Jvd3RoIHJhdGUgb2YgdHVtb3IgY2VsbHMKYTIgPSAwLjUgICAjIEdyb3d0aCByYXRlIG9mIGh1bnRpbmcgY2VsbHMKYTMgPSAwLjEgICAjIERlYXRoIHJhdGUgb2YgaHVudGluZyBjZWxscwphNCA9IDEuMCAgICMgR3Jvd3RoIHJhdGUgb2YgcmVzdGluZyBjZWxscwphNSA9IDAuMSAgICMgSW50ZXJhY3Rpb24gdGVybSBiZXR3ZWVuIGh1bnRpbmcgYW5kIHJlc3RpbmcgY2VsbHMKYTYgPSAwLjEgICAjIERlYXRoIHJhdGUgb2YgcmVzdGluZyBjZWxscwp3MSA9IDAuNSAgICMgSGFsZi1zYXR1cmF0aW9uIGNvbnN0YW50IGZvciB0dW1vciBjZWxscwp3MiA9IDAuNSAgICMgSGFsZi1zYXR1cmF0aW9uIGNvbnN0YW50IGZvciBodW50aW5nIGNlbGxzCmsxID0gMC41ICAgIyBGZWVkYmFjayBjb250cm9sIGNvZWZmaWNpZW50IGZvciB0dW1vciBjZWxscwprMiA9IDAuMSAgICMgRmVlZGJhY2sgY29udHJvbCBjb2VmZmljaWVudCBmb3IgaHVudGluZyBjZWxscwprMyA9IDAuMSAgICMgRmVlZGJhY2sgY29udHJvbCBjb2VmZmljaWVudCBmb3IgcmVzdGluZyBjZWxscwoKIyBEZWZpbmUgdGhlIHN5c3RlbSBvZiBlcXVhdGlvbnMKZGVmIG1vZGVsKHksIHQpOgogICAgeDEsIHgyLCB4MyA9IHkKICAgIGR4MWR0ID0gMSArIGExICogeDEgKiAoMSAtIHgxKSAtICh4MSAqIHgyKSAvICh3MSArIHgxKSAtIGsxICogeDEKICAgIGR4MmR0ID0gKGEyICogeDIgKiB4MykgLyAodzIgKyB4MykgLSBhMyAqIHgyICsgazIgKiB4MgogICAgZHgzZHQgPSBhNCAqIHgzICogKDEgLSB4MykgLSAoYTUgKiB4MiAqIHgzKSAvICh3MiArIHgzKSAtIGE2ICogeDMgKyBrMyAqIHgzCiAgICByZXR1cm4gW2R4MWR0LCBkeDJkdCwgZHgzZHRdCgojIEluaXRpYWwgY29uZGl0aW9uczogW3R1bW9yIGNlbGxzLCBodW50aW5nIGNlbGxzLCByZXN0aW5nIGNlbGxzXQppbml0aWFsX2NvbmRpdGlvbnMgPSBbMC4xLCAwLjUsIDAuNV0KCiMgVGltZSBwb2ludHMgd2hlcmUgc29sdXRpb24gaXMgY29tcHV0ZWQKdCA9IG5wLmxpbnNwYWNlKDAsIDUwLCA1MDApCgojIFNvbHZlIE9ERXMKc29sdXRpb24gPSBvZGVpbnQobW9kZWwsIGluaXRpYWxfY29uZGl0aW9ucywgdCkKCiMgUGxvdCB0aGUgcmVzdWx0cwpwbHQuZmlndXJlKGZpZ3NpemU9KDEwLCA2KSkKcGx0LnBsb3QodCwgc29sdXRpb25bOiwgMF0sIGxhYmVsPSdUdW1vciBDZWxscyAoeDEpJywgY29sb3I9J3InKQpwbHQucGxvdCh0LCBzb2x1dGlvbls6LCAxXSwgbGFiZWw9J0h1bnRpbmcgQ2VsbHMgKHgyKScsIGNvbG9yPSdnJykKcGx0LnBsb3QodCwgc29sdXRpb25bOiwgMl0sIGxhYmVsPSdSZXN0aW5nIENlbGxzICh4MyknLCBjb2xvcj0nYicpCnBsdC50aXRsZSgnRmVlZGJhY2sgU3lzdGVtIER5bmFtaWNzJykKcGx0LnhsYWJlbCgnVGltZScpCnBsdC55bGFiZWwoJ0NlbGwgUG9wdWxhdGlvbicpCnBsdC5sZWdlbmQoKQpwbHQuZ3JpZCgpCnBsdC5zaG93KCk=