matlab绘图出bug,自己编写了一段Matlab代码,运行时出现bug - 计算模拟 - 小木虫 - 学术 科研 互动社区...

一段模拟化学反应的代码,运行时出现“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)   %平均链长-时间曲线

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值