24小时热门版块排行榜    

查看: 1397  |  回复: 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 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 可靠消息,8月21号(明天)放榜 +11 医学老男孩 2026-08-20 13/650 2026-08-20 10:50 by anjeeshine
[基金申请] 时间戳变了,能看出什么问题? +13 基诺咪客 2026-08-17 17/850 2026-08-20 10:43 by wangyue2015
[基金申请] 只有每年这种时候来逛逛小木虫 +21 yaoyewhu2008 2026-08-20 21/1050 2026-08-20 10:37 by Vivilian
[基金申请] 哪位老哥知道今年的国自然具体哪一天放榜? +15 Ldrop2023 2026-08-13 19/950 2026-08-20 10:30 by 陈晨晨陈啊
[基金申请] 欢迎发来filecode的Mz6后的代码验证其规律 +55 医学老男孩 2026-08-13 125/6250 2026-08-20 09:02 by 医学老男孩
[基金申请] 今天基金会出结果吗?20260819 +14 kkkl_v 2026-08-19 15/750 2026-08-20 08:21 by sunzitan
[教师之家] 为什么余额宝的年化利率越来越低?主要原因有哪些? +5 瞬息宇宙 2026-08-15 5/250 2026-08-19 20:23 by super2002521
[基金申请] 今天放榜吗? +14 布布和一二 2026-08-19 15/750 2026-08-19 18:07 by gltch
[基金申请] filecode=后面第一个是大写字母 +10 wangze12014 2026-08-14 12/600 2026-08-19 16:56 by 苦难博士
[基金申请] 2027广东省杰青 +4 奶牛小黑 2026-08-15 10/500 2026-08-19 11:02 by wanfengnew
[基金申请] 朋友圈看到的 +6 wangzilk 2026-08-18 8/400 2026-08-19 10:55 by Haru815
[基金申请] 重要消息,中午系统在维护 +10 yuleib84 2026-08-18 11/550 2026-08-19 07:30 by 羽毛枫f
[论文投稿] 投稿咨询 +4 wwm09 2026-08-17 6/300 2026-08-18 15:36 by wwm09
[基金申请] 时间戳又变了8-15 +14 archvillain 2026-08-15 26/1300 2026-08-18 13:37 by phantomgost
[基金申请] 今天维护系统维护 祝所有人 高中 +8 gjjjzhong 2026-08-18 9/450 2026-08-18 13:01 by 家与远方
[基金申请] 93BebMhtakh前后11位开头都是大写 +4 且听虎啸 2026-08-17 5/250 2026-08-18 00:49 by 蔡棒棒菂
[基金申请] 感觉是下周放榜了 +6 angus9576 2026-08-17 11/550 2026-08-17 23:57 by angus9576
[基金申请] 今天系统多次维护,明天很可能放榜! +8 zju2000 2026-08-16 9/450 2026-08-17 12:20 by lmz0216
[精细化工] 招聘 金属平磨液,抛光液研发工程师 +3 小天0311 2026-08-14 3/150 2026-08-16 07:31 by H9PLUS
[基金申请] 各位道友,我要去昆明玩几天,回来见。 +7 Tide man 2026-08-14 8/400 2026-08-15 01:11 by arzu_hma
信息提示
请填处理意见