You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Matlab Simbiology中实现含时变k1的随机模拟?

实现Matlab SimBiology中k1随时间线性变化的随机模拟

问题背景

需要对基因表达模型进行随机模拟,其中转录速率常数k1随时间线性变化(例如k1(t) = k0 + a*t,k0为初始值,a为斜率),但现有工具默认不支持时变速率的随机模拟,已尝试Python的stochpy、gillespy2及Matlab的SimBiology工具。

解决方案:利用SimBiology事件实现参数时变更新

标准Gillespie算法假设速率常数恒定,要实现时变参数,可通过**事件(Event)**在模拟过程中定期更新k1的值,以此近似线性变化。具体步骤及修改后的代码如下:

% Create a new model
model = sbiomodel('GeneExpressionModel');

% Add reactions for gene expression
reaction1 = addreaction(model, 'Gene -> Gene + mRNA');
reaction2 = addreaction(model, 'mRNA -> mRNA + Protein');
reaction3 = addreaction(model, 'mRNA -> null');
reaction4 = addreaction(model, 'Protein -> null');

% Set reaction rate constants
kineticLaw1 = addkineticlaw(reaction1, 'MassAction');
kineticLaw2 = addkineticlaw(reaction2, 'MassAction');
kineticLaw3 = addkineticlaw(reaction3, 'MassAction');
kineticLaw4 = addkineticlaw(reaction4, 'MassAction');

% 将k1改为全局参数,方便事件修改
p1 = addparameter(model, 'k1', 'Value', 0.1); % 初始值k0=0.1
p2 = addparameter(kineticLaw2, 'k2', 'Value', 0.05);
p3 = addparameter(kineticLaw3, 'k3', 'Value', 0.01);
p4 = addparameter(kineticLaw4, 'k4', 'Value', 0.002);

% Set the rate equation for each reaction
kineticLaw1.ParameterVariableNames = {p1.Name};
kineticLaw2.ParameterVariableNames = {p2.Name};
kineticLaw3.ParameterVariableNames = {p3.Name};
kineticLaw4.ParameterVariableNames = {p4.Name};

% Set initial conditions
model.Species(1).InitialAmount = 1;
model.Species(2).InitialAmount = 0;
model.Species(3).InitialAmount = 0;

% --------------------------
% 添加事件实现k1的线性变化:k1(t) = 0.1 + 0.001*t
% --------------------------
% 定义斜率参数
slope_k1 = addparameter(model, 'slope_k1', 'Value', 0.001);
% 创建事件:定期触发更新k1
event = addevent(model);
% 触发规则:每隔0.1时间单位更新一次(可根据精度调整)
event.Trigger = 'time >= lastTriggerTime + 0.1';
% 更新动作:按线性公式修改k1
event.Effect = 'k1 = 0.1 + slope_k1*time';
% 设置初始触发时间
event.InitialTriggerTime = 0;

% Configure the stochastic solver
configSet = getconfigset(model, 'active');
set(configSet, 'SolverType', 'ssa'); % 启用Gillespie随机算法
set(configSet, 'StopTime', 100); % 设置模拟结束时间
% 启用事件功能
set(configSet, 'Events', 'on');

% Run the stochastic simulation
simulationData = sbiosimulate(model);

% Plot the simulation results
figure;
plot(simulationData.Time, simulationData.Data);
xlabel('Time');
ylabel('Species Count');
legend('Gene', 'mRNA', 'Protein');
title('Stochastic Simulation of Gene Expression with Time-Varying k1');

% 绘制k1的变化曲线,验证效果
figure;
t = simulationData.Time;
k1_theory = 0.1 + 0.001*t;
plot(t, k1_theory, 'b-', 'LineWidth', 1.5);
xlabel('Time');
ylabel('k1 Value');
title('Time-Varying k1 (Linear)');

关键说明

  • 事件触发的时间间隔越小,k1的变化越接近连续线性,模拟精度越高,但会增加计算量
  • 若需要严格连续的时变速率,也可直接定义反应速率为时间的函数(例如kineticLaw1.Rate = '(0.1 + 0.001*time)*Gene'),但部分SimBiology版本对SSA模式下的自定义时变速率支持有限,需自行验证
  • 事件方法是SimBiology中处理时变参数的标准方案,兼容性更好

内容的提问来源于stack exchange,提问作者Cristina Palma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 16:02:43