24小时热门版块排行榜    

查看: 3373  |  回复: 20

dbb627

荣誉版主 (著名写手)

\code
function f=enzym
%生物化学米氏方程的仿真
%S+E<=>ES->E+P,反应动力学常数k1(S+E->ES)、k1r(ES->E+S)和k2(ES->E+P)
%----
%其中S代表底物,E代表酶,ES表示酶和底物相合在一起的中间产物,
%一个底物分子结合一个酶分子,然后生成一个分子新的物质P,并将酶释放出来,
%酶本身并没有发生任何变化。
%已知反应动力学常数k1=2、k1r=1和k2=1.5,系统的初值S(0)=30 mol,E(0)=5 mol, ES(0)=0,P(0)=0
[ts,data] = ode45(@enzyme,0:0.01:10,[30 5 0 0]);
plot(ts,data(:,1),'r',ts,data(:,2),'b',ts,data(:,3),'g',ts,data(:,4),'m')
legend('[S]','[E]','[ES]','[P]')
f=[ts,data];

function dmf=enzyme(t,X)
S=X(1);
E=X(2);
ES=X(3);
P=X(4);
dS=-10*S+2*ES*S+ES;
dE=2.5*ES-10*S+2*ES*S;
dES=10*S-2*ES*S-2.5*ES;
dP=1.5*ES;
dmf=[dS;dE;dES;dP];\code
这段代码直接存为m文件 run即可
The more you learn, the more you know, the more you know, and the more you forget. The more you forget, the less you know. So why bother to learn.
11楼2011-10-13 13:55:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dbb627

荣誉版主 (著名写手)

写错了
CODE:
function f=enzym
%生物化学米氏方程的仿真
%S+E<=>ES->E+P,反应动力学常数k1(S+E->ES)、k1r(ES->E+S)和k2(ES->E+P)
%----
%其中S代表底物,E代表酶,ES表示酶和底物相合在一起的中间产物,
%一个底物分子结合一个酶分子,然后生成一个分子新的物质P,并将酶释放出来,
%酶本身并没有发生任何变化。
%已知反应动力学常数k1=2、k1r=1和k2=1.5,系统的初值S(0)=30 mol,E(0)=5 mol, ES(0)=0,P(0)=0
[ts,data] = ode45(@enzyme,0:0.01:10,[30 5 0 0]);
plot(ts,data(:,1),'r',ts,data(:,2),'b',ts,data(:,3),'g',ts,data(:,4),'m')
legend('[S]','[E]','[ES]','[P]')
f=[ts,data];

function dmf=enzyme(t,X)
S=X(1);
E=X(2);
ES=X(3);
P=X(4);
dS=-10*S+2*ES*S+ES;
dE=2.5*ES-10*S+2*ES*S;
dES=10*S-2*ES*S-2.5*ES;
dP=1.5*ES;
dmf=[dS;dE;dES;dP];

这个引用估计是对的,直接复制到editor中保存 运行
The more you learn, the more you know, the more you know, and the more you forget. The more you forget, the less you know. So why bother to learn.
12楼2011-10-13 13:59:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

northerwood

金虫 (小有名气)

引用回帖:
12楼: Originally posted by dbb627 at 2011-10-13 13:59:09:
写错了
[code] function f=enzym
%生物化学米氏方程的仿真
%S+E<=>ES->E+P,反应动力学常数k1(S+E->ES)、k1r(ES->E+S)和k2(ES->E+P)
%----
%其中S代表底物,E代表酶,ES表示酶和底物相合 ...

谢谢您。还是运行不了。不如你讲程序m文件给我发在邮箱:swga99e@163.com
   再次谢谢您!!
春风化雨乐未央,行健不息须自强
13楼2011-10-13 16:55:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dbb627

荣誉版主 (著名写手)

你的邮箱有问题,发不过去 见附件
拷到当前目录下 点run直接运行
The more you learn, the more you know, the more you know, and the more you forget. The more you forget, the less you know. So why bother to learn.
14楼2011-10-13 17:22:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

hhucy

实习版主 (著名写手)

DOE锅炉工

引用回帖:
2楼: Originally posted by dbb627 at 2011-09-29 15:44:25:
有机理模型吗,相关常数和条件
我有个酶反应模拟的例子 你可以参考下
以下是生化反应中常见的酶促反应方程:

其中S代表底物,E代表酶,ES表示酶和底物相合在一起的中间产物,一个底物分子结合一个酶分子,然 ...

可不可以把k1 k2 这些做成未知参数传递进去? 具体赋值不在M文件中写入
谢谢
人生那么多不确定,你怕什么
15楼2011-10-18 15:52:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dbb627

荣誉版主 (著名写手)

引用回帖:
15楼: Originally posted by hhucy at 2011-10-18 15:52:51:
可不可以把k1 k2 这些做成未知参数传递进去? 具体赋值不在M文件中写入
谢谢

这个没问题,程序做些简单的修改就可以了 ,利用全局变量来传递
CODE:
function f=enzym
%生物化学米氏方程的仿真
%S+E<=>ES->E+P,反应动力学常数k1(S+E->ES)、k1r(ES->E+S)和k2(ES->E+P)
%----
%其中S代表底物,E代表酶,ES表示酶和底物相合在一起的中间产物,
%一个底物分子结合一个酶分子,然后生成一个分子新的物质P,并将酶释放出来,
%酶本身并没有发生任何变化。
%已知反应动力学常数k1=2、k1r=1和k2=1.5,系统的初值S(0)=30 mol,E(0)=5 mol, ES(0)=0,P(0)=0
global k1 k1r k2 E0
k1=2;k1r=1;k2=1.5;E0=5;
[ts,data] = ode45(@enzyme,[0:0.01:10],[30 5 0 0]);
plot(ts,data(:,1),'r',ts,data(:,2),'b',ts,data(:,3),'g',ts,data(:,4),'m')
legend('[S]','[E]','[ES]','[P]')
f=[ts,data];

function dmf=enzyme(t,X)
%k1=2;k1r=1;k2=1.5;E0=5;
global k1 k1r k2 E0
S=X(1);E=X(2);ES=X(3);P=X(4);
% dS=-10*S+2*ES*S+ES;
% dE=2.5*ES-10*S+2*ES*S;
% dES=10*S-2*ES*S-2.5*ES;
% dP=1.5*ES;
dS=k1r*ES-k1*(E0-ES)*S;
dE=-k1*(E0-ES)*S+k1r*ES+k2*ES;
dES=k1*(E0-ES)*S-k1r*ES-k2*ES;
dP=k2*ES;
dmf=[dS;dE;dES;dP];

The more you learn, the more you know, the more you know, and the more you forget. The more you forget, the less you know. So why bother to learn.
16楼2011-10-18 18:11:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

hhucy

实习版主 (著名写手)

DOE锅炉工

引用回帖:
16楼: Originally posted by dbb627 at 2011-10-18 18:11:22:
这个没问题,程序做些简单的修改就可以了 ,利用全局变量来传递
[code]function f=enzym
%生物化学米氏方程的仿真
%S+E<=>ES->E+P,反应动力学常数k1(S+E->ES)、k1r(ES->E+S)和k2(ES->E+P)
...

也就是说 是在M文件里面也要写global 在调用时也要写global了
那么M文件function 要不要写成f=enzym(t,x,k1,k2)这样?
人生那么多不确定,你怕什么
17楼2011-10-19 12:49:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dbb627

荣誉版主 (著名写手)

引用回帖:
17楼: Originally posted by hhucy at 2011-10-19 12:49:05:
也就是说 是在M文件里面也要写global 在调用时也要写global了
那么M文件function 要不要写成f=enzym(t,x,k1,k2)这样?

对,这个是一种形式,不需要写成写成f=enzym(t,x,k1,k2)这样

还有一种形式即写成f=enzym(t,x,k1,k2)这样,在调用ode解算器是输入k1,k2的值 具体形式如下
CODE:
function f=enzym
%生物化学米氏方程的仿真
%S+E<=>ES->E+P,反应动力学常数k1(S+E->ES)、k1r(ES->E+S)和k2(ES->E+P)
%----
%其中S代表底物,E代表酶,ES表示酶和底物相合在一起的中间产物,
%一个底物分子结合一个酶分子,然后生成一个分子新的物质P,并将酶释放出来,
%酶本身并没有发生任何变化。
%已知反应动力学常数k1=2、k1r=1和k2=1.5,系统的初值S(0)=30 mol,E(0)=5 mol, ES(0)=0,P(0)=0

[ts,data] = ode45(@enzyme,[0:0.01:10],[30 5 0 0],[],2,1,1.5,5)
plot(ts,data(:,1),'r',ts,data(:,2),'b',ts,data(:,3),'g',ts,data(:,4),'m')
legend('[S]','[E]','[ES]','[P]')
f=[ts,data];

function dmf=enzyme(t,X,k1,k1r,k2,E0)

S=X(1);E=X(2);ES=X(3);P=X(4);

dS=k1r*ES-k1*(E0-ES)*S;
dE=-k1*(E0-ES)*S+k1r*ES+k2*ES;
dES=k1*(E0-ES)*S-k1r*ES-k2*ES;
dP=k2*ES;
dmf=[dS;dE;dES;dP];

The more you learn, the more you know, the more you know, and the more you forget. The more you forget, the less you know. So why bother to learn.
18楼2011-10-19 14:08:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

hhucy

实习版主 (著名写手)

DOE锅炉工

引用回帖:
18楼: Originally posted by dbb627 at 2011-10-19 14:08:14:
对,这个是一种形式,不需要写成写成f=enzym(t,x,k1,k2)这样

还有一种形式即写成f=enzym(t,x,k1,k2)这样,在调用ode解算器是输入k1,k2的值 具体形式如下
[code]function f=enzym
%生物化学米氏方程的仿 ...

谢谢,能否解释下
[ts,data] = ode45(@enzyme,[0:0.01:10],[30 5 0 0],[],2,1,1.5,5)
这段代码中[30 5 0 0]和2,1,1.5,5之间的[]表示什么意思?
人生那么多不确定,你怕什么
19楼2011-10-19 15:54:43
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dbb627

荣誉版主 (著名写手)

这个要从ode命令的格式说起
   [TOUT,YOUT] = ODE45(ODEFUN,TSPAN,Y0,OPTIONS) solves as above with default
    integration properties replaced by values in OPTIONS, an argument created
    with the ODESET function. See ODESET for details. Commonly used options
    are scalar relative error tolerance 'RelTol' (1e-3 by default) and vector
    of absolute error tolerances 'AbsTol' (all components 1e-6 by default).
    If certain components of the solution must be non-negative, use
    ODESET to set the 'NonNegative' property to the indices of these
    components.
[30 5 0 0]和2,1,1.5,5之间的[]表示options不做更改,后面的2,1,1.5,5是函数中参数的值
否则如果没有[].程序会认为2,1,1.5,5是options中值而发生错误
The more you learn, the more you know, the more you know, and the more you forget. The more you forget, the less you know. So why bother to learn.
20楼2011-10-19 16:38:20
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 northerwood 的主题更新
信息提示
请填处理意见