24小时热门版块排行榜    

查看: 533  |  回复: 0

pangteng1990

金虫 (正式写手)

[求助] 浓度一时间比法确定反应级数和计算速率常数 MATLAB程序出错

我按照文献中给出的程序运行的,可是总是出错,就是原始数据的输入,不知道怎么弄,老是出错,求大神帮忙
% 数据输入
edit t.m; %输入时间数据
edit c.m %输入浓度数据
%数据处理程序 fyjs.m
load t.m; %调入时间数据
load c.m %调入浓度数据
N0=max(size(t));
C0=c(1,1);
x=[];
tb=[];
x1=[];
for i=2:1:N0
    a=(c(1,1)-c(1,i))./c(1,1); %将浓度数据转化为转化率
    x=[x,a];
end
t(1:1)=[];
N=max(size(t));
sn=[];
for i=1:1:N-1
    for j=i+1:1:N
        b=t(1,j)./t(1,i); %计算测定数据中毎两组数据的时间比
    end
end
st=sum(tb); %计算总时间比
tn=[];
for n=-3:0.001:3; %逐步逼近搜索,从-3级到3级,步长为0.001
    xn=[];
    for i=1:1:N-1
        for j=i+1:1:N
            if n==1
                w=log(1-x(1,j))./log(1-x(1,i)); %反应级数n=1时的浓度比
            else
                w=((1-x(1,j)).^(1-n)-1)./((1-x(1,i)).^(1-n)-1); %反应级数n≠1时的浓度比
            end
            xn=[xn,w];
        end
    end
    tn=[tn,n];
    sn=[sn,sum(xn)]; %建立不同级数下总浓度比集合
end
d=[];
for k=1:1:max(size(sn))
    d=abs([d,sn(1,k)-st]); %建立总浓度比和总时间比的差的集合
end
for k=1:1:max(size(sn))
    if abs(sn(1,k)-st)==min(d); %搜索最小差值的位置
        n=tn(1,k); %记录最小差值的反应级数
    end
end
kc=[];
for k=1:1:N0-1
    if n==1
        p=-log(1-x(1,k))./t(1,k); %计算反应级数n=1时的速率常数
    else
        p=C0.^(1-n).*((1-x(1,k)).^(1-n)-1)./(n-1)./t(1,k); %计算反应级数n≠1时的速率常数
        kc=[kc,p];
    end
end
kc=sum(kc)./(N-1); %计算速率常数的平均值
T/min            
0
120
190
250
312
370
500
c/g/L
16.9250
16.5639
16.4806
16.2028
16.0917
15.7306
15.4250
回复此楼

» 本帖附件资源列表

  • 欢迎监督和反馈:小木虫仅提供交流平台,不对该内容负责。
    本内容由用户自主发布,如果其内容涉及到知识产权问题,其责任在于用户本人,如对版权有异议,请联系邮箱:xiaomuchong@tal.com
  • 附件 1 : 浓度_时间比法确定反应级数和计算速率常数_粟智.caj
  • 2015-06-15 10:48:49, 143.42 K
  • 附件 2 : ctb.m
  • 2015-06-15 10:55:32, 1.32 K

» 猜你喜欢

一个人的武林
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

智能机器人

Robot (super robot)

我们都爱小木虫

找到一些相关的精华帖子,希望有用哦~

科研从小木虫开始,人人为我,我为人人
相关版块跳转 我要订阅楼主 pangteng1990 的主题更新
信息提示
请填处理意见