一段模拟化学反应的代码,运行时出现“Undefined function 'P' for input arguments of type 'double',而我只是想用P(i)作为一个数组储存分子数,请大家帮我看看,怎么修改?谢谢大家!
Xm=2000;Xa=2;Xr=0; % [Xm]=2 mol/L
kd=0.00001;kp=1000;kt=10000000;
kd1=0.00001;kp1=1;kt1=10000; % VNa=1000
T=0;
j=0;
I=[];X=[];U=[];V=[];Pn=[];
while(T<=2400)
Rd=kd1*Xa;
Rp=kp1*Xm*Xr;
Rt=0.5*kt1*Xr*Xr;
R=Rd+Rp+Rt;
Pd=Rd/R;Pp=Rp/R;Pt=Rt/R;
r1=rand(1);
t=(1/R)*log(1/r1);
r2=rand(1);
if r2<=Pd %链引发(不区分单体和初级自由基)
Xm=Xm-2;
Xa=Xa-1;
Xr=Xr+2;
j=j+1;
X=[X;j];
R(j)=1;
j=j+1;
X=[X;j];
R(j)=1;
else
if r2>Pd&&r2<=Pd+Pp %链增长
Xm=Xm-1;
b=ceil(Xr*rand(1));
r3=X(b);
R(r3)=R(r3)+1;
else
if r2>Pd+Pp&&r2<=1
Xr=Xr-2;
c=ceil(Xr*rand(1));
r4=X(c);
X(c)=[];
d=ceil((Xr-1)*rand(1));
r5=X(d);
X(d)=[];
i=R(r4)+R(r5);
z=find(I==i);
if z>=1
P(i)=P(i)+1;%储存分子数
else
P(i)=1;%储存终止产物链长
end
I=[I;i];
end
end
end
T=T+t;U=[U;T];%储存时间
C=(2000-Xm)*100/2000;
V=[V;C];%储存单体转化率
L=length(I);S=sum(I);
E=S/L;%平均链长
Pn=[Pn;E];
end
N=sum(P(i));
f(i)=P(i)./N;%数量分布
m(i)=i.*P(i);
M=sum(m(i));
w(i)=m(i)./M;%重量分布
subplot(221);
plot(I,f(i))
subplot(222);
plot(I,w(i))
subplot(223);
plot(U,V) %转化率-时间曲线
subplot(224);
plot(U,Pn) %平均链长-时间曲线