matlab拟合不稳定初值影响大,Matlab拟合化学 反应速率方程.doc

Matlab拟合化学 反应速率方程

Matlab拟合化学 反应速率方程

对含温度系数的化学反应速率方程进行拟合。测试发现用cftool的拟合函数进行拟合比调用lsqnonlin()要好用得多。

调试情况:

a=8.188704E+013b=-4799.760247

拟合残差0.996347

输入校正系数

0.001A=1.000208E+011B=-842.079002C=2.499924

拟合残差1.000000

输入校正系数,或按0键接受当前值,进行下一组拟合

0

拟合需要经验,只有估测值好的时候,可以使相关度趋近于1.

源代码:

functionkneticMultiFit

%功能:计算含温度系数的反应速率常数

%

%说明:

%1.拟合方程形式K=A*exp(-E/RT)*(T/298)^n

%2.令x=1/T,a=A,b=-E/R,c=n

%3.首先调用expl1Fit进行k=a*exp(b*x)拟合获得初值系数a

%4.调用expl2Fit进行k=a*exp(b*x)/(x*298)^c拟合得到系数abc

%5.需要调用expl1Fit和expl2Fit文件

%

%补充说明:根据经验,n1时温度系数对高温段影响大,也就是1/T坐标轴靠近0的区域。

%而通过调整系数A使它的初值接近真实值时,而其他参数B和C只需要置零,

%也可使拟合效果比较理想。通过调整factor因子,使曲线在1/T坐标轴靠近0的区域拟合

%度增大,便可以使最终残差趋近于1.

%为了有好的收敛性,将expl2Fit中(第57行左右)ABC的拟合范围做了规定,当拟

%合情况不理想,出现拟合值在边界上时,需要调整ABC的取值范围。默认为:

%'Lower',[0-Inf0.3],'Upper',[Inf03]

%非线性拟合收敛性定义:

%'MaxFunEvals',800,'MaxIter',600,'TolFun',1e-7,'TolX',1e-7clearall,clc

%%---测试计算系数---

T=[1000:50:2000];

A=1e11;

En=-7E3;

R=8.314;

KN=[A*exp(En/R./T).*(T/298).^2.5;A*exp(En/R./T).*(T/298).^1.5];

%%--

%%---键盘输入T和k

%T=input('inputTemperatureTin[x1x2.xn]form');

%k=input('inputknetickin[x1x2.xn]form');

%%---

%%--直接输入T和k

%T=;

%k=;

%%---

%%--读入文件中的数据

%data_fit

%%---

fit_results=;

fori=1:size(KN)

k=KN(i,:);

%%取T的倒数用于拟合计算

Tr=1./T;

%用k=a*exp(b*x)拟合,得到org,g1

[org,g1]=expl1Fit(Tr,k);

fprintf('\na=%E\tb=%f\n',org.a,org.b);

fprintf('拟合残差%f\n',g1.rsquare);

%输入校正系数factor=10.110etc.

factor=input('输入校正系数\n');

%选用不同的a系数

af1=org.a*factor;

%定义其他初值

bf=0;

nf=0;

%%用k=a*exp(b*x)/(x*298)^c拟合,得到f,f_g

[f1,f_g1]=expl2Fit(Tr,k,af1,bf,nf);

fprintf('\nA=%E\tB=%f\tC=%f\n',f1.a,f1.b,f1.c);

fprintf('拟合残差%f\n',f_g1.rsquare);

%提示修改校正系数

factor=input('输入校正系数,或按0键接受当前值,进行下一组拟合\n');

whilefactor~=0closeallaf1=org.a*factor;

[f1,f_g1]=expl2Fit(Tr,k,af1,bf,nf);

fprintf('\nA=%E\tB=%f\tC=%f\n',f1.a,f1.b,f1.c);

fprintf('拟合残差%f\n',f_g1.rsquare);

factor=input('输入校正系数,或按0键接受当前值,进行下一组拟合\n');

endfit_results=[fit_results;f1.af1.bf1.cf_g1.rsquare];

i=i+1;

closeallendfinal_data=[KNfit_results];

savefitfinal_datafunction[cf_,g]=expl1Fit(Tr,k)

%Setupfiguretoreceivedatasetsandfitsfiguref_

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值