24小时热门版块排行榜    

Znn3bq.jpeg
查看: 1233  |  回复: 4

anren

铜虫 (初入文坛)

[求助] 求助matlab拟合动力学K值 已有1人参与

动力学模型为
dC(1)/dt=    -((k(1)+k(2)))*C(1)
dC(2)/dt=   k(1)*C(1)-k(3)*C(2)-k(4)*C(2)
dC(3)/dt=    k(2)*C(1)-k(5)*C(3)
dC(4)/dt=    -k(6)*C(4)+k(3)*C(2)
dC(5)/dt=     k(4)*C(2)+k(5)*C(3)-k(7)*C(5)
dC(6)/dt=     k(6)*C(4)+k(7)*C(5) ;

实验数据   
%  t      C(1)      C(2)    C(3)   C(4)    C(5)     C(6) %   
   ExpData =[
         0       238.5300         0         0           0         0            0                                               
   22.0000   77.1500    8.3600   13.9900        0    0.5100         0
   36.0000   58.4500   13.0200   27.5800    0.0300    0.9200         0
   55.0000   33.0900   16.8200   48.3100    0.0500    1.7100    0.0100
   76.0000   15.9600   25.5900   55.2300    0.1200    3.0500    0.0500
   96.0000    1.5500   25.7900   63.3900    0.4200    8.8400         0
  115.0000    0.0400   19.1900   46.9500    1.2800   32.4400    0.1000
  134.0000         0   17.8700   25.0700    2.0000   54.8500    0.2100
  154.0000    0.0200    6.2800   15.7100    2.5300   74.9700    0.4900
  173.0000         0    1.6900    3.0300    2.9600   91.3100    0.9900
  177.0000         0    1.1000    1.3300    2.9300   93.6800    0.9500
  178.0000         0    0.5400    0.3600    3.1000   94.9000    1.0800
  188.0000         0    0.3700    0.5000    3.0400   94.7400    1.3500 ]

哪位大神能帮忙拟合一下k值呢?为什么我一直得不出结果
回复此楼

» 猜你喜欢

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

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

youmengtian

铜虫 (初入文坛)

【答案】应助回帖

感谢参与,应助指数 +1
你这个是怎么思路做的?我这里有一个简单的程序,你可以看一眼。
function k1k2k3
format long
clear all
clc
tspan = [0  30  50  80 140 170 200 230 260 290 320 360 400 460 520 580 600];
x0 = [9; 0];
k0 = [0.001  0  0.08];   
lb = [0  0  0];
ub = [1  1  1];

data=...
    [

30        7.939        1.458
50        7.687        1.535
80        7.289        1.602
140        6.658        1.717
170        6.531        1.722
200        6.218        1.671
230        5.979        1.620
260        5.591        1.550
290        5.414        1.488
320        4.968        1.433
360        4.692        1.350
400        4.438        1.319
460        4.144        1.294
520        4.041        1.294
580        4.052        1.287
600        4.030        1.292
];
yexp = data(:,2:3);

[k,resnorm,residual,exitflag,output,lambda,jacobian] = ...
    lsqnonlin(@ObjFunc,k0,lb,ub,[],tspan,x0,yexp);      
ci = nlparci(k,residual,jacobian);
fprintf('\n\n使用函数lsqnonlin()估计得到的参数值为:\n')
fprintf('\tk1 = %.9f ± %.9f\n',k(1),ci(1,2)-k(1))
fprintf('\tk2 = %.9f ± %.9f\n',k(2),ci(2,2)-k(2))
fprintf('\tk3 = %.9f ± %.9f\n',k(3),ci(3,2)-k(3))
fprintf('  The sum of the squares is: %.9e\n\n',resnorm)

function f = ObjFunc(k,tspan,x0,yexp)           % 目标函数
[t Xsim] = ode45(@KineticsEqs,tspan,x0,[],k);
Xsim1=Xsim(:,1);
Xsim2=Xsim(:,2);
ysim(:,1) = Xsim1(2:end);
ysim(:,2) = Xsim2(2:end);

%size(ysim(:,1));
%size(ysim(:,2));
%size(yexp(:,1));
%size(yexp(:,2));

f = [(ysim(:,1)-yexp(:,1)) (ysim(:,2)-yexp(:,2))];

function dCdt = KineticsEqs(t,C,k)              % ODE模型方程
dCAdt = -k(1)*C(1)+k(2)*C(2);
dCBdt = k(1)*C(1)-k(2)*C(2)-k(3)*C(2);
dCdt = [dCAdt; dCBdt];
2楼2015-06-26 19:41:28
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

matlab编程

禁虫 (小有名气)

本帖内容被屏蔽

3楼2015-06-27 12:34:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

anren

铜虫 (初入文坛)

引用回帖:
2楼: Originally posted by youmengtian at 2015-06-26 19:41:28
你这个是怎么思路做的?我这里有一个简单的程序,你可以看一眼。
function k1k2k3
format long
clear all
clc
tspan = ;
x0 = ;
k0 = ;   
lb = ;
ub = ;

data=...
    ;
yexp = data(:,2:3);

=  ...

这个是我照书上程序改的,可是计算不出结果。
function KineticsEst5
clear all
clc
k0 = [0.5  0.5  0.5  0.5  0.5 0.5 0.5];         % 参数初值
lb = [0  0  0  0  0 0 0];                   % 参数下限
ub = [+inf  +inf  +inf  +inf  +inf +inf  +inf];    % 参数上限
C0 = [ 238.53    0   0   0   0   0      ];
ExpData =[0 238.53  0   0   0   0   0
22  77.15   8.36    13.99   0   0.51    0
36  58.45   13.02   27.58   0.03    0.92    0
55  33.09   16.82   48.31   0.05    1.71    0.01
76  15.96   25.59   55.23   0.12    3.05    0.05
96  1.55    25.79   63.39   0.42    8.84    0
115 0.04    19.19   46.95   1.28    32.44   0.1
134 0   17.87   25.07   2   54.85   0.21 ]
t= ExpData(:,1)'
yexp = ExpData(:,2:7);                  % yexp: 实验数据[x1        x4        x5        x6]

% 使用函数fmincon()进行参数估计
[k,fval,flag] = fmincon(@ObjFunc4Fmincon,k0,[],[],[],[],lb,ub,[],[],C0,yexp);
fprintf('\n使用函数fmincon()估计得到的参数值为:\n')
fprintf('\tk1 = %.4f\n',k(1))
fprintf('\tk2 = %.4f\n',k(2))
fprintf('\tk3 = %.4f\n',k(3))
fprintf('\tk4 = %.4f\n',k(4))
fprintf('\tk5 = %.4f\n',k(5))
fprintf('\tk5 = %.4f\n',k(6))
fprintf('\tk5 = %.4f\n',k(7))

fprintf('  The sum of the squares is: %.1e\n\n',fval)
k_fmincon = k;

% 使用函数lsqnonlin()进行参数估计
[k,resnorm,residual,exitflag,output,lambda,jacobian] = ...
    lsqnonlin(@ObjFunc4LNL,k0,lb,ub,[],C0,yexp);      
ci = nlparci(k,residual,jacobian);
fprintf('\n\n使用函数lsqnonlin()估计得到的参数值为:\n')
Output

% 以函数fmincon()估计得到的结果为初值,使用函数lsqnonlin()进行参数估计
k0 = k_fmincon;
[k,resnorm,residual,exitflag,output,lambda,jacobian] = ...
    lsqnonlin(@ObjFunc4LNL,k0,lb,ub,[],C0,yexp);      
ci = nlparci(k,residual,jacobian);
fprintf('\n\n以fmincon()的结果为初值,使用函数lsqnonlin()估计得到的参数值为:\n')
Output


% ------------------------------------------------------------------
function f = ObjFunc4Fmincon(k,C0,yexp)
tspan = [0    22    36    55    76    96   115   134 ];
[t C] = ode45(@KineticEqs,tspan,C0,[],k);   
y(:,1) = C(:,1);
y(:,2:6) = C(:,2:6);
f = sum((y(:,1)-yexp(:,1)).^2) + sum((y(:,2)-yexp(:,2)).^2)   ...
    + sum((y(:,3)-yexp(:,3)).^2) + sum((y(:,4)-yexp(:,4)).^2) ...
    + sum((y(:,5)-yexp(:,5)).^2) + sum((y(:,6)-yexp(:,6)).^2);

% ------------------------------------------------------------------
function f = ObjFunc4LNL(k,C0,yexp)
tspan = [0    22    36    55    76    96   115   134 ];
[t C] = ode45(@KineticEqs,tspan,C0,[],k);   
y(:,1) = C(:,1);
y(:,2:6) = C(:,2:6);
f1 = y(:,1) - yexp(:,1);
f2 = y(:,2) - yexp(:,2);
f3 = y(:,3) - yexp(:,3);
f4 = y(:,4) - yexp(:,4);
f5 = y(:,5) - yexp(:,5);
f6 = y(:,6) - yexp(:,6);
f = [f1; f2; f3; f4;f5;f6];

% ------------------------------------------------------------------
function dCdt = KineticEqs(t,C,k)
dCdt =  ...
       [  ( -((k(1)+k(2)))*C(1) )
           (k(1)*C(1)-k(3)*C(2)-k(4)*C(2) )
           ( k(2)*C(1)-k(5)*C(3) )
          ( -k(6)*C(4)+k(3)*C(2) )
          ( k(4)*C(2)+k(5)*C(3)-k(7)*C(5) )
        ( k(6)*C(4)+k(7)*C(5) )];
4楼2015-06-29 10:07:55
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

anren

铜虫 (初入文坛)

引用回帖:
3楼: Originally posted by matlab编程 at 2015-06-27 12:34:16
这个我才做过。

那快点把程序分享一下啊
5楼2015-06-29 10:10:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 anren 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 通信工程求调剂!!! +7 zlb770521 2026-04-14 7/350 2026-04-19 20:56 by Equinoxhua
[考研] 294求调剂 +8 淡然654321 2026-04-17 9/450 2026-04-19 19:51 by Equinoxhua
[考研] 304求调剂 +8 castLight 2026-04-16 8/400 2026-04-19 17:14 by 中豫男
[考研] 求调剂 +6 苦命人。。。 2026-04-18 7/350 2026-04-19 16:27 by 中豫男
[论文投稿] 有没有接收比较快的sci期刊呀,最好在一个月之内的,研三孩子求毕业 20+4 之护着 2026-04-16 6/300 2026-04-19 13:00 by Aaron_zyn
[考研] 327求调剂 +27 Xxjc1107. 2026-04-13 30/1500 2026-04-19 08:22 by cuisz
[考研] 接受任何调剂 +6 也就是栗子 2026-04-17 7/350 2026-04-18 17:20 by 涵竹刘
[考研] 22408 312求调剂 +24 门路摸摸 2026-04-14 26/1300 2026-04-18 13:04 by wunaiy88
[考研] 收到复试调剂但是去不了 +8 小蜗牛* 2026-04-16 8/400 2026-04-18 11:15 by zixin2025
[考研] 一志愿华中农业071010,320求调剂 +17 困困困困坤坤 2026-04-14 19/950 2026-04-17 20:08 by 关一盏灯cd
[考研] 一志愿中科大材料与化工,353分还有调剂学校吗 +10 否极泰来2026 2026-04-15 12/600 2026-04-17 17:54 by mapenggao
[考研] 295分求调剂 +5 ?要上岸? 2026-04-17 5/250 2026-04-17 16:51 by fenglj492
[考研] 一志愿沪9,生物学326求调剂 +9 刘墨墨 2026-04-15 9/450 2026-04-16 17:14 by 崔崔崔cccc
[基金申请] RY:中国产出的科学垃圾论文,绝对数量和比例都世界第一 +7 zju2000 2026-04-14 18/900 2026-04-16 11:36 by 欢乐颂叶蓁
[考研] 药学求调剂 +14 喽哈加油 2026-04-14 16/800 2026-04-16 10:15 by beilsong20
[考研] 求调剂学校 +14 不会吃肉 2026-04-13 16/800 2026-04-15 21:59 by noqvsozv
[考研] 297工科调剂? +14 河南农业大学-能 2026-04-13 15/750 2026-04-15 13:25 by 黑科技矿业
[考研] 考研调剂 +13 长弓傲 2026-04-13 14/700 2026-04-14 14:44 by zs92450
[考研] 245求调剂 +6 冰糖橘?汽水 2026-04-13 10/500 2026-04-14 10:49 by jyl0317
[考研] 085600材料与化工329分求调剂 +24 叶zilin 2026-04-13 25/1250 2026-04-14 09:20 by 试管破裂
信息提示
请填处理意见