当前位置: 首页 > 计算模拟 >matlab拟合方程参数时初值的选择

matlab拟合方程参数时初值的选择

作者 lxyy
来源: 小木虫 750 15 举报帖子
+关注

A+B=C  A+W=R  R+B=C+W
先考虑的三个反应都是可逆反应,有以下几个式子:编写程序如下
%30℃
clear all
clc
global keq1 keq2 t0 c0

keq1 = 3.94;         % 平衡常数k1
keq3 = 1.08;   % 平衡常数k3

t0 = [5,10, 15, 30, 45, 60,90,120,160,200,240,300,360];
c0 = [5.939601,5.203973,0,0.022484,0.078956]        % A B C R W 组成的初始浓度
ci=[3.742508811        4.213566482        0.990406938        0.252498405        0.090415512;
3.045716838        3.387013322        1.816960097        0.215546741        0.081072022;
2.504754523        2.901991595        2.301981824        0.193427102        0.099462604;
1.65098702        2.036686653        3.167286766        0.170236582        0.095144044;
1.271633833        1.655460403        3.548513016        0.124730781        0.10334349;
1.129887499        1.630815394        3.573158025        0.129798695        0.097764543;
1.01239208        1.460748979        3.74322444        0.144649391        0.073614958;
1.007417603        1.429180292        3.774793127        0.123477124        0.094249307;
0.990005723        1.499216939        3.704756481        0.135524067        0.076072022;
0.970073726        1.493966669        3.71000675        0.130791851        0.076387812;
0.96903024        1.429705429        3.77426799        0.119510017        0.101202216;
0.980873385        1.457988124        3.745985296        0.124189274        0.097022161;
0.98477262        1.453402965        3.750570455        0.1200936         0.0762608];

% cA cC cR 对应时间数值

k0=[1 1 1];   % k1+, k2, k3+ 初始向值
lb = [0 0 0];
ub = [1000  1000 500];  % 上下限

% 使用函数lsqnonlin()进行参数估计
[k,resnorm,residual,exitflag] = lsqnonlin(@ObjFunc,k0,lb,ub,[],ci);      

k1plus=k(1);
k1minus= k1plus/keq1;
k2=k(2);
k3plus=k(3);
k3minus= k3plus/keq3;

% ------------------------------------------------------------------
function f = ObjFunc(k,ci)    % 目标函数
global t0  c0

[t,c_cal] = ode45(@Euqations,t0,c0,[],k);
f= sum((c_cal-ci)^2);

% ------------------------------------------------------------------
function dcdt = Euqations(t,c,k)
global keq1 keq2

k1plus=k(1);
k1minus= k1plus/keq1;
k2=k(2);
k3plus=k(3);
k3minus= k3plus/keq3;

cA=c(:,1);
cB=c(:,2);
cC=c(:,3);
cR=c(:,4);
cW=c(:,5);

dcAdt = k1plus*cA*cB-k1minus*cC+k2*cA*cW;
dcCdt = -k1plus*cA*cB+k1minus*cC+k3plus*cB*cR-k3minus*cC*cW;
dcRdt = k2*cA*cW-k3plus*cB*cR+k3minus*cC*cW;
dcdt = [dcAdt; dcCdt;dcRdt];
但是k的初值一直影响结果,程序要怎么改一下初值对结果影响不大(这个程序有问题,) 返回小木虫查看更多

今日热帖
  • 精华评论
  • dingd

    微分方程dcBdt, dcWdt的表达式呢?

  • lxyy

    引用回帖:
    2楼: Originally posted by dingd at 2012-03-28 10:37:30:
    微分方程dcBdt, dcWdt的表达式呢?

    我写在附件里面了

  • dingd

    最好把你的专业问题用通俗的数学语言来描述,非化工专业的很难理解的;
    你的问题应该就是一微分方程拟合问题,仅需描述清楚:

    1:微分方程组表达式
    2:对应的数据
    3:要求的参数

  • lxyy

    引用回帖:
    4楼: Originally posted by dingd at 2012-03-28 11:07:18:
    最好把你的专业问题用通俗的数学语言来描述,非化工专业的很难理解的;
    你的问题应该就是一微分方程拟合问题,仅需描述清楚:

    1:微分方程组表达式
    2:对应的数据
    3:要求的参数

    不好意思,我的微分方程组就是附件里面标(1)(2)(3)的三个式子,对应的数据为

    时间:t0 = [5,10, 15, 30, 45, 60,90,120,160,200,240,300,360];
    不同时刻对应的数据
    c0 = [5.939601,5.203973,0,0.022484,0.078956]        % A B C R W 组成的初始浓度
    ci=[3.742508811        4.213566482        0.990406938        0.252498405        0.090415512;
    3.045716838        3.387013322        1.816960097        0.215546741        0.081072022;
    2.504754523        2.901991595        2.301981824        0.193427102        0.099462604;
    1.65098702        2.036686653        3.167286766        0.170236582        0.095144044;
    1.271633833        1.655460403        3.548513016        0.124730781        0.10334349;
    1.129887499        1.630815394        3.573158025        0.129798695        0.097764543;
    1.01239208        1.460748979        3.74322444        0.144649391        0.073614958;
    1.007417603        1.429180292        3.774793127        0.123477124        0.094249307;
    0.990005723        1.499216939        3.704756481        0.135524067        0.076072022;
    0.970073726        1.493966669        3.71000675        0.130791851        0.076387812;
    0.96903024        1.429705429        3.77426799        0.119510017        0.101202216;
    0.980873385        1.457988124        3.745985296        0.124189274        0.097022161;
    0.98477262        1.453402965        3.750570455        0.1200936         0.0762608];
    要求的是ki+,k2,k3+,
    另外方程中的ki-=ki+/3.14,k3-=k3+/1.08

  • dingd

    数据项B、W有对应的微分方程吗?还是自由变量?

  • lxyy

    引用回帖:
    6楼: Originally posted by dingd at 2012-03-28 14:58:43:
    数据项B、W有对应的微分方程吗?还是自由变量?

    有的,我写在附件里了,真是太谢谢了

  • dingd

    怎么感觉和挤牙膏似的!!

    公式写的对吗?是否好好检查过?和1楼的代码有不少不同,比如对r2的定义,"dCB/wdt"应该是“dCB/dt”吗?公式(2)和(5)都给的是“dCB/dt”,那“dCC/dt”呢?

猜你喜欢
下载小木虫APP
与700万科研达人随时交流
  • 二维码
  • IOS
  • 安卓