我目前正在尝试从以下论文中重新创建分叉图:https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0011238#ack
这是我试图重新创建的分叉图:
这些是为系统提供的微分方程:
我一直在尝试绘制每个方程的零斜线,以最终绘制它们对于不同 s4 值(他们选择的分叉参数)的相交点。我忍不住觉得我使用了错误的方程,而且我尝试绘制可能表明分叉图任何相似之处的零斜线并没有起作用,
我想知道使用这些方程是否走在正确的轨道上,而我的错误出在代码中,或者也许应该绘制 Nanog 合成率与 Nanog 降解率的零斜线,然后用s4 的多个值?
这是我一直在尝试的代码:
def os_nullcline(os):
return (u * (((s1 * os**v) / ((k1 + os**v) * do)) * ((s2 * os**v) / ((k2 + os**v) * ds))))/dos
def n_nullcline(n, os):
return (((s4 * n**b) / (k4 + n**b)) + ((s3 * os**v) / (k3 + os**v)) + np.random.normal(0, sigma) * n)/dn
# Defining values for u and v
npts = 100
os_values = np.linspace(0, 4000, npts)
n_values = np.linspace(0, 4000, npts)
# Calculating the nullcline value
os_null = os_nullcline(os_values)
n_null = n_nullcline(n_values, os_values)
# Plotting nullclines
plt.plot(os_values, os_null, label='os nullcline', color='blue')
plt.plot(n_null, n_values, label='n nullcline', color='red')
我应该考虑不同的方程吗?该论文不提供替代方程。我一直在考虑绘制nanog合成和nanog降解的零斜线,因为当它们相交时,能级应该处于稳定状态,所以我尝试这样做:
import numpy as np
import matplotlib.pyplot as plt
def plot_nullclines(k4, b, s4, k3, s3, dn, v):
n_values = np.linspace(0, 10, 100)
os_values = np.linspace(0, 10, 100)
# Nullcline equation 1
nullcline1 = (k4 + n_values**b) * (s4 * n_values**b) + (k3 + os_values**v) * (s3 * os_values**v)
# Nullcline equation 2
nullcline2 = dn * n_values
# Plotting nullclines
plt.plot(n_values, nullcline1, label='Nullcline 1', color='blue')
plt.plot(n_values, nullcline2, label='Nullcline 2', color='red')
plt.xlabel('n')
plt.ylabel('Expression level')
plt.title('Nullclines of the given equations')
plt.legend()
plt.grid(True)
plt.show()
# Example usage
plot_nullclines(k4=10, b=2, s4=14, k3=10, s3=0.1, dn=1, v=1)
但我只得到这个图表,这不可能是正确的。我哪里错了?
分叉图显示了与参数相关的稳定和不稳定平衡的位置。
这里的情况本质上是一维的,因为第一个方程不依赖于[N],因此它的非零稳定平衡是一个常数。所以它需要精确计算一次。注意,如果参数不合适,可能不存在。
在第二个方程中失去随机项,您在这里没有模拟 SDE。之后,由于 s4 呈线性出现,您可以通过隔离 s4 并计算作为 [N] 函数的图形来更轻松地计算曲线。
在后处理过程中,根据函数表计算 s4 的局部最小值和最大值,为各段提供正确的破折号样式。