【发布时间】:2015-05-11 04:54:50
【问题描述】:
给定一个微分方程组,例如:
dy/dt = f(t)
dx/dt = g(t)
使用dsolve可以找到解决方案,如:
dsolve(diff(y) == f(t), diff(x) == g(t), y(0) == 1, x(0) == 1);
但是对于所有变量相互依赖的系统呢:
dy/dt = f(y,z)
dx/dt = g(x,y)
dz/dt = h(z,x)
当以相同的方式处理初始条件时,对于确实有解的系统,我找不到解。
我知道我尝试过的系统可以产生解决方案,因为我使用了随机/确定性模拟器 - 认为可能使用了一些奇怪的语法。
如果有帮助,我正在专门寻找导数都为零的解决方案。
编辑:
这是一个例子:
PX/dt = (k_tl*(a0_tr + ((a_tr*KM^n)/((KM^n) + (PZ^n))))/kd_mRNA)-kd_prot*PX;
PY/dt = (k_tl*(a0_tr + ((a_tr*KM^n)/((KM^n) + (PX^n))))/kd_mRNA)-kd_prot*PY;
PZ/dt = (k_tl*(a0_tr + ((a_tr*KM^n)/((KM^n) + (PY^n))))/kd_mRNA)-kd_prot*PZ;
系数:
eff = 20;
KM = 40;
tau_mRNA=2.0;
tau_prot=10;
ps_a=0.5;
ps_0=5.0E-4;
t_ave = tau_mRNA/log(2);
k_tl=eff/t_ave;
a_tr=(ps_a-ps_0)*60;
a0_tr=ps_0*60;
kd_mRNA = log(2)/tau_mRNA;
kd_prot = log(2)/tau_prot;
beta = tau_mRNA/tau_prot;
alpha = a_tr*eff*tau_prot/(log(2)*KM);
alpha0 = a0_tr*eff*tau_prot/(log(2)*KM);
n=2;
以及初始条件:
PX0 = 20;
PY0 = 0;
PZ0 = 0;
这会产生一个响应:
这显然有一个稳态解(所有导数均为 0)。
在 MATLAB 中我尝试过:
%%
syms PX(t) PY(t) PZ(t);
z = dsolve(diff(PX) == (k_tl*(a0_tr + ((a_tr*KM^n)/((KM^n) + (PZ^n))))/kd_mRNA)-kd_prot*PX, diff(PY) == (k_tl*(a0_tr + ((a_tr*KM^n)/((KM^n) + (PX^n))))/kd_mRNA)-kd_prot*PY, diff(PZ)==(k_tl*(a0_tr + ((a_tr*KM^n)/((KM^n) + (PY^n))))/kd_mRNA)-kd_prot*PZ,PX(0)==20)
和:
%%
eq1 = (k_tl*(a0_tr + ((a_tr*KM^n)/((KM^n) + (PZ^n))))/kd_mRNA)-kd_prot*PX;
eq2 = (k_tl*(a0_tr + ((a_tr*KM^n)/((KM^n) + (PX^n))))/kd_mRNA)-kd_prot*PY;
eq3 = (k_tl*(a0_tr + ((a_tr*KM^n)/((KM^n) + (PY^n))))/kd_mRNA)-kd_prot*PZ;
dsolve(diff(PX)==eq1,PX(0)==20,diff(PY)==eq2,PY(0)==0,diff(PZ)==eq3,PZ(0)==0)
两者都不产生错误,但返回一个空符号。
【问题讨论】:
-
“当以相同的方式接近时,在初始条件下,对于确实有解决方案的系统,我找不到解决方案。”你打算与我们分享这个系统和它的解决方案吗?当您说“可以产生解决方案”时,您的意思是系统具有解析解决方案还是您已经能够以数值方式解决它?你需要让你的问题更具体。显示您的实际代码,以便其他人可以复制您的问题。
-
已更新示例。