24小时热门版块排行榜    

CyRhmU.jpeg
查看: 2250  |  回复: 14

小小莓邮

铁虫 (小有名气)

[求助] 拜求!matlab拟合动力学参数已有2人参与

实验数据如下
t(h)[RH]              [ROOH]
0        8.32016                0
1        7.37673                0.21115
2        6.74433                0.7379
3        5.92613                1.10562
4        5.68806                1.29586
5        5.01584                1.58327
6        6.09249                1.36404
8        5.34827                1.84065
10        4.9961                2.00986
动力学模型如图
其中[o2]浓度未测量但认为恒定,想把K4[o2]看成一个参数,并估计出其他的k1 k1‘ K4 K5 K8 f 值,matlab一窍不通,看了几天了还是不明所以,所以恳请各位大神给拟合一下,并给出代码,因为还要拟合其他的,所以想大神给出一个后面好跟着做。。。
拜求!matlab拟合动力学参数
捕获.JPG
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
回帖支持 ( 显示支持度最高的前 50 名 )

小小莓邮

铁虫 (小有名气)

引用回帖:
2楼: Originally posted by 钟静 at 2014-02-18 16:54:32
有几点不懂哈:
1.等式右边的是什么,-r_RH?怎么没给出来?直接把原模型放出来看看啦!在等式里面也没有体现时间,可见这个式子和数据,给出的数据和给出的模型等式不匹配啊兄弟!
2.浓度恒定,你居然不知道数值? ...

1、等式左边-rRH=-d[RH]/dt 速率表示
2、氧气浓度目前没法测,但认为其浓度恒定,主要是为了确定速率与几种产物的关系,并不是深究每个k的真实值,所以才认为k4[O2]可以看做一个常数
3、matlab真心不会,在坛子里看了好几天了,也看到了一下案例及代码,但还是整不明白,也写不出来,才求教各位大神,先看看能不能帮忙写出这个得代码,后面的自己再慢慢来!
小弟先在此谢过了!
3楼2014-02-18 19:00:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通回帖

钟静

新虫 (初入文坛)

有几点不懂哈:
1.等式右边的是什么,-r_RH?怎么没给出来?直接把原模型放出来看看啦!在等式里面也没有体现时间,可见这个式子和数据,给出的数据和给出的模型等式不匹配啊兄弟!
2.[o2]浓度恒定,你居然不知道数值?测量困难?多一个参数对其他参数影响也很大呀!
3.最小二乘法啦,Matlab的lsqcurvefit函数可以满足你的计算要求!
2楼2014-02-18 16:54:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jerkwin

专家顾问 (正式写手)

你的模型没说全, 单凭你这几个数据不可能做出来
提问之前连最基本的背景都不说, 你以为别人都是神, 知道你要的是什么?
4楼2014-02-18 22:54:21
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

feixiaolin

荣誉版主 (文坛精英)

优秀版主

参考答案
Function  -y'=a*s*y/(a+s*y)*sqrt(k*y/s)+2*f*p*z;
a                  -2.75305471610901
s                  0.551052004868096
k                  0.0492131827205991
f                  0.0321328503671436
p                  15.9935756616899

» 本帖已获得的红花(最新10朵)

5楼2014-02-19 09:51:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dingd

铁杆木虫 (职业作家)

不知理解的对否,用1stOpt求解:
CODE:
Variable t, RH, ROOH;
ODEFunction RH'=-(k4/(k4+k5*RH)*k5*RH*sqrt(k1*ROOH/k8)+2*f*k1*ROOH);
Data;
//t(h)[RH]              [ROOH]
0        8.32016                0
1        7.37673                0.21115
2        6.74433                0.7379
3        5.92613                1.10562
4        5.68806                1.29586
5        5.01584                1.58327
6        6.09249                1.36404
8        5.34827                1.84065
10        4.9961                2.00986

目标函数值稳定但参数组值不唯一:
1:
均方差(RMSE):0.337408531472899
残差平方和(SSE):0.910756136885585
相关系数(R): 0.901867531322994
相关系数之平方(R^2): 0.813365044054631
确定系数(DC): 0.81334823805307
F统计(F-Statistic): 4.01817798116069

参数                  最佳估算
--------------------        -------------
k4        -0.00960366653113242
k5        0.00108370577772373
k1        -3.63159583413505
k8        -0.00354975409632072
f        0.0406346976895024

2:
均方差(RMSE):0.337408531472899
残差平方和(SSE):0.910756136885585
相关系数(R): 0.901867531322902
相关系数之平方(R^2): 0.813365044054465
确定系数(DC): 0.81334823805307
F统计(F-Statistic): 4.01817798116068

参数                  最佳估算
--------------------        -------------
k4        -0.000186819014387768
k5        2.10812031658941E-5
k1        -0.254411174415381
k8        -9.41033214347948E-8
f        0.580040555144359

有过拟合现象。其实微分方程可简化为:RH'=-(k8/(1+k5*RH)*RH*sqrt(ROOH)+f*ROOH);此时参数仅3个,结果稳定唯一:
均方差(RMSE):0.337408531472898
残差平方和(SSE):0.910756136885582
相关系数(R): 0.901867531324836
相关系数之平方(R^2): 0.813365044057954
确定系数(DC): 0.813348238053071
F统计(F-Statistic): 13.393926603869

参数                  最佳估算
--------------------        -------------
k8        0.0346625904471096
k5        -0.112842920106452
f        -0.295137602915853
拜求!matlab拟合动力学参数-1
f1.jpg

6楼2014-02-19 10:54:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

钟静

新虫 (初入文坛)

引用回帖:
5楼: Originally posted by feixiaolin at 2014-02-19 09:51:32
参考答案
Function  -y'=a*s*y/(a+s*y)*sqrt(k*y/s)+2*f*p*z;
a                  -2.75305471610901
s                  0.551052004868096
k                  0.0492131827205991
f                  0.0321328503671436
p                  1 ...

我还是觉得数据太少了,哪怕可以拟合出来,结果的意义也不大了。其中还有一个导数,拟合的时候是要把这个算出来吧,如果间隔是一个小时的话求出的速率有代表性不?
7楼2014-02-19 13:10:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

pdl9527

专家顾问 (小有名气)

【答案】应助回帖

感谢参与,应助指数 +1
随便编了一下,拟合结果有点问题,估计是k的初值k0取得有问题或者数据太少或者实验数据有问题。。。
程序如下,其中k0是我随便设的初值,k1=k1,k2=k1',k3=k8,k4=k4*[O],k5=k5,k6=f



function piadatfit2
clear all;clc
tspan=[0 1 2 3 4 5 6 8 10];
cexp=[8.32016 0;7.37673 0.21115;
    6.74433 0.7379;5.92613 1.10562;5.68806 1.29586;
    5.01584 1.58327;6.09249 1.36404;5.34827 1.84065;4.9961 2.00986];
k0=[-0.1 1 -2.3 13 0.2 0.4];
c0=[8.32016 0];
LB=[0 0 0 0 0 0];
UB=[+inf +inf +inf +inf +inf +inf];
[k,resnorm,residual]=lsqnonlin(@objpia,k0,LB,UB,[],cexp,tspan,c0)
[tplot cplot]=ode45(@piakin,tspan,c0,[],k);
plot(tspan,cexp(:,1),'bx',tplot,cplot(:,1),'b-',tspan,cexp(:,2),'ko',tplot,cplot(:,2),'k-')

function f=objpia(k,cexp,tspan,c0)
[t c]=ode45(@piakin,tspan,c0,[],k);
f1=c(:,1)-cexp(:,1);
f2=c(:,2)-cexp(:,2);
f=[f1;f2];
function dcdt=piakin(t,c,k)
dc1dt=-(k(4)*k(5)*c(1)*sqrt(k(1)*c(2)/k(3))/(k(4)+k(5)*c(1))+2*k(6)*k(2)*c(2));
dc2dt=(k(4)*k(5)*c(1)*sqrt(k(1)*c(2)/k(3))/(k(4)+k(5)*c(1))+2*k(6)*k(2)*c(2));
dcdt=[dc1dt dc2dt]';

» 本帖已获得的红花(最新10朵)

8楼2014-02-19 15:16:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

小小莓邮

铁虫 (小有名气)

送红花一朵
引用回帖:
5楼: Originally posted by feixiaolin at 2014-02-19 09:51:32
参考答案
Function  -y'=a*s*y/(a+s*y)*sqrt(k*y/s)+2*f*p*z;
a                  -2.75305471610901
s                  0.551052004868096
k                  0.0492131827205991
f                  0.0321328503671436
p                  1 ...

先谢谢大神,能不能给出代码,毕竟是想看一下怎么弄出来的,至少后面的可以自己做!
9楼2014-02-19 17:33:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

小小莓邮

铁虫 (小有名气)

引用回帖:
6楼: Originally posted by dingd at 2014-02-19 10:54:29
不知理解的对否,用1stOpt求解:

Variable t, RH, ROOH;
ODEFunction RH'=-(k4/(k4+k5*RH)*k5*RH*sqrt(k1*ROOH/k8)+2*f*k1*ROOH);
Data;
//t(h)              
0        8.32016                0
1      ...

大神用的1stOpt做的啊,这边用不起啊,不过还是谢谢,至少学到很多,也说明是可以做出来的!谢谢!
10楼2014-02-19 17:41:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 小小莓邮 的主题更新
信息提示
请填处理意见