24小时热门版块排行榜    

查看: 2140  |  回复: 14
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

l1003785517

新虫 (小有名气)

[求助] 用1stopt计算非线性方程组的未知参数

各位虫友能否帮忙看看
        代码如下,其中a1和a2都可以写成k=k0.exp^(-Ea/RT),即反应速率常数,T是变量。我把参数合并是因为会出现过拟合现象,但即使是这样,我算出来还是会出现参数结果不一样,而且我是希望能够求出k0和Ea来的,不知道有没有什么解决的办法,下面的代码里面只放了一个温度下的实验数据。我把另外几个温度的数据也放到代码的后面了,各位虫友看能帮我解决一下这个难题吗,若有可能帮忙分别计算一下a1和a2中的k0和Ea?
        因为后面还要对不同的动力学方程进行计算,所以想问一下这个是不是得用高阶付费的1stopt软件才能做呢?我用的网上注册版1.5的无法得到正确的结果。谢谢!如果不需要的话还望虫友在解答的过程中能发一下原代码,万分感谢,这里我把剩余的金币都奉上!还望相助,谢谢!
//用1stopt计算非线性方程组的未知参数
Title "kinetic values";
Variables x(1:3),y(1:2);
Parameters a(1:5);
ShareModel;
Function y1=a1*x1/(1+a3*x1+a4*x2+a5*x3);
          y2=(a2*x2-a1*x1)/(1+a3*x1+a4*x2+a5*x2);
Data;
//T=275度 x1,x2,x3;y1,y2;
6.31317        0.029302 0.007644 0.0574 0.0345
6.29412        0.044590 0.011466 0.0407 0.0298
6.27507        0.059878 0.015288 0.0241 0.0251
6.26237        0.069433 0.018473 0.0278 0.0203
6.24713        0.080899 0.022295 0.0315 0.0208
6.23316        0.091091 0.026117 0.0268 0.0194
6.22109 0.099372 0.029939 0.0220 0.0160
6.21093        0.107016 0.032487 0.0172 0.0127
//另外几个实验数据
//T=282度
6.14807        0.133133        0.069433        0.2894        0.1089
6.062345        0.186004        0.102557        0.1519        0.0714
6.021705        0.202566        0.126763        0.0144        0.0338
5.991225        0.212758        0.147147        0.0425        -0.0038
5.968365        0.220402        0.162435        0.0705        0.0217
5.937885        0.234416        0.178997        0.0575        0.0297
5.91566        0.244608        0.1911        0.0445        0.0201
5.892165        0.254163        0.205114        0.0316        0.0105
//T=287度
6.0452        0.187278        0.118482        0.4615        0.1918
5.89026        0.277095        0.184093        0.273        0.1397
5.80136        0.326781        0.223587        0.0845        0.0876
5.74675        0.356083        0.249067        0.0829        0.0356
5.69976        0.377741        0.274547        0.0813        0.0243
5.67182        0.386022        0.294294        0.0677        0.0176
5.648325        0.390481        0.313404        0.0541        0.0152
5.614035        0.400673        0.33761        0.0404        0.0129
//T=292度
5.90677        0.220402        0.224224        0.6236        0.1761
5.741035        0.303212        0.307671        0.4216        0.1584
5.559425        0.383474        0.409591        0.2197        0.1408
5.434965        0.437619        0.480298        0.2059        0.1231
5.311775        0.497497        0.543998        0.1921        0.0677
5.26669        0.514696        0.572026        0.1219        0.0332
5.229225        0.527436        0.596869        0.0817        0.0195
5.201285        0.53508        0.617253        0.0585        0.0058@月只蓝@beefly
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

l1003785517

新虫 (小有名气)

引用回帖:
3楼: Originally posted by 月只蓝 at 2018-07-04 07:36:35
如2楼所说,公式k=k0.exp^(-Ea/RT)与a的关系说明不清楚,而且此公式的写法本身就是错误的,正确的是“k=k0*exp(-Ea/R/T),作为求助者,像已知的常数R=8.314应该给出。

...

是的,作为一个求助者真的不应该出现这种错误,很抱歉。
我在代码中给出的公式,Function y1=a1*x1/(1+a3*x1+a4*x2+a5*x3);
                                                    y2=(a2*x2-a1*x1)/(1+a3*x1+a4*x2+a5*x2);
     a1=k1*exp^(-Ea1/R/T);
     a2=k2*exp^(-Ea2/R/T);
     这是一个阿伦尼乌斯公式,k1,k2都是指前因子,Ea1,Ea2是活化能,这几个参数都是我希望求出来的,但是若果放到公式进去会出现过拟合,所以我才把它们合并了放在代码里。R是常数8.314,T是反应温度,代码中我给出了4个温度下的实验数据。
    希望能够得到您的帮助?万分感谢!
6楼2018-07-04 12:55:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 15 个回答

dingd

铁杆木虫 (职业作家)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
月只蓝: 金币+5, 感谢指导! 2018-07-04 07:39:00
月只蓝: 金币+5, 感谢指导! 2018-07-04 07:39:33
最好把公式写清楚:
Function y1=a1*x1/(1+a3*x1+a4*x2+a5*x3);
          y2=(a2*x2-a1*x1)/(1+a3*x1+a4*x2+a5*x2);

与:
k=k0.exp^(-Ea/RT)
都是什么关系?公式“k=k0.exp^(-Ea/RT)”应该是“k=k0.exp^(-Ea/(R*T))”吧?R又是多少?
2楼2018-07-03 22:40:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

月只蓝

主管区长 (职业作家)

如2楼所说,公式k=k0.exp^(-Ea/RT)与a的关系说明不清楚,而且此公式的写法本身就是错误的,正确的是“k=k0*exp(-Ea/R/T),作为求助者,像已知的常数R=8.314应该给出。

发自小木虫Android客户端
MATLAB、MS小问题、普通问题请发帖求助!时间精力有限,恕不接受无偿私信求助。
3楼2018-07-04 07:36:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

l1003785517

新虫 (小有名气)

引用回帖:
2楼: Originally posted by dingd at 2018-07-03 22:40:05
最好把公式写清楚:
Function y1=a1*x1/(1+a3*x1+a4*x2+a5*x3);
          y2=(a2*x2-a1*x1)/(1+a3*x1+a4*x2+a5*x2);

与:
k=k0.exp^(-Ea/RT)
都是什么关系?公式“k=k0.exp^(-Ea/RT)”应该是“k=k0.exp^(-E ...

首先感谢您的回复,对我的描述不清楚表示抱歉。
      代码中的公式,Function y1=a1*x1/(1+a3*x1+a4*x2+a5*x3);
                                             y2=(a2*x2-a1*x1)/(1+a3*x1+a4*x2+a5*x2);
     a1=k1.exp^(-Ea1/RT);
     a2=k2.exp^(-Ea2/RT);
     这是一个阿伦尼乌斯公式,k1,k2都是指前因子,Ea1,Ea2是活化能,这几个参数都是我希望求出来的,但是若果放到公式进去会出现过拟合,所以我才把它们合并了放在代码里。R是常数8.314,T是反应温度,代码中我给出了4个温度下的实验数据。
     不知道您是否能帮我解决这个问题呢?万分感谢!
4楼2018-07-04 12:48:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见