24小时热门版块排行榜    

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

1135725495

铁杆木虫 (著名写手)

[求助] 求解微分方程组的参数 已有2人参与

求解K1,K2,a, m
方程组为:
CB'=-K1*CB^a*(k1/k2*CB^a)^m
CH'=K2*(K1/K2*CB^a)^m
t         CB         CH
60        10.9237        0
90        10.7462        0
120        10.4357        0.03778
135        10.1695        0.0432
150        9.7481        0.1203
165        9.2346        0.21242
180        8.6613        0.34579
195        8.0058        0.56225
210        7.2423        0.83487
225        6.4188        1.12793
240        5.5353        1.38079
255        4.5768        1.869
270        4.0146        2.5
285        3.5703        3.01
300        3.1158        3.54452
330        2.4438        4.312
360        1.9878        4.70402
390        1.6668        4.8548
回复此楼

» 猜你喜欢

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

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

lu_yu_lan

新虫 (初入文坛)

引用回帖:
2楼: Originally posted by dingd at 2016-09-06 23:02:57
1stOpt试了下,或许还有更好的结果:

均方差(RMSE): 0.681320279985844
残差平方和(SSE): 15.7827090132796
相关系数(R): 0.971338834557611
相关系数之平方(R^2): 0.943499131519738
修正R平方(Adj. R^2):  ...

带入参数后为什么是如下结果,不知哪里有什么问题?

            60.        10.9237             0.
            90.        10.4374       0.255129
           120.        9.89908       0.531102
           135.        9.60554       0.678648
           150.        9.29215       0.833842
           165.        8.95519       0.997972
           180.         8.5897        1.17273
           195.        8.18881        1.36041
           210.        7.74256        1.56429
           225.        7.23555        1.78928
           240.        6.64186        2.04341
           255.        5.91159        2.34155
           270.        4.92268        2.71809
           285.          3.116        3.31463
           300.        -1.#IND        -1.#IND
           330.        -1.#IND        -1.#IND
           360.        -1.#IND        -1.#IND
           390.        -1.#IND        -1.#IND
4楼2016-09-17 08:11:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 7 个回答

dingd

铁杆木虫 (职业作家)

【答案】应助回帖

★ ★ ★ ★ ★
感谢参与,应助指数 +1
1135725495: 金币+5, 有帮助 2016-09-11 17:37:52
1stOpt试了下,或许还有更好的结果:

均方差(RMSE): 0.681320279985844
残差平方和(SSE): 15.7827090132796
相关系数(R): 0.971338834557611
相关系数之平方(R^2): 0.943499131519738
修正R平方(Adj. R^2): 0.930539243440337
确定系数(DC): 0.890053744503595
F统计(F-Statistic): 87.6923836038994

参数                  最佳估算
--------------------        -------------
k1        0.00556462413275392
a        -0.471720992027294
k2        0.000955248259076988
m        3.39014801069688
2楼2016-09-06 23:02:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lu_yu_lan

新虫 (初入文坛)

【答案】应助回帖

参考:http://www.forcal.net/yyhz/luwffcnh.htm
代码:
!!!using["IMSL","luopt","math"]; //使用命名空间
f(t,CB,CH,dCB,dCH::K1,K2,a,m)=
{
  dCB=-K1*CB^a*(K1/K2*CB^a)^m,
  dCH=K2*(K1/K2*CB^a)^m
};
目标函数(_K1,_K2,_a,_m : i,s,tyz : tyArray,tA,max,K1,K2,a,m)=
{
     K1=_K1, K2=_K2, a=_a, m=_m,   //传递优化变量,函数f中要用到K1,K2,a,m
     tyz=ode[@f,tA,ra1(10.9237,0)],
     i=0, s=0, while{++i<max, s=s+[tyz(i,1)-tyArray(i,1)]^2+[tyz(i,2)-tyArray(i,2)]^2},
     s
};
main(::tyArray,tA,max)=
{
     tyArray=matrix{          //存放实验数据ti,yi
         "60        10.9237        0
90        10.7462        0
120        10.4357        0.03778
135        10.1695        0.0432
150        9.7481        0.1203
165        9.2346        0.21242
180        8.6613        0.34579
195        8.0058        0.56225
210        7.2423        0.83487
225        6.4188        1.12793
240        5.5353        1.38079
255        4.5768        1.869
270        4.0146        2.5
285        3.5703        3.01
300        3.1158        3.54452
330        2.4438        4.312
360        1.9878        4.70402
390        1.6668        4.8548"
     },
    len[tyArray,0,&max], tA=tyArray(all:0), //用len函数取矩阵的行数,tA取矩阵的列
    ClearImslErr(),             //清空IMSL错误输出
    ERSET(0,0,0),               //关闭IMSL所有警告
    Opt[@目标函数,optwaysimdeep, optwayconfra],              //Opt函数全局优化
    ERSET(0,2,2), ERSET(0,1,0)   //恢复IMSL警告
};

结果(K1,K2,a,m,目标函数值):

2.007221403771439e-002    3.477931047132456e-002    0.7598653691173753        -1.205432420176749        18.90800296978626
3楼2016-09-16 17:31:34
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lu_yu_lan

新虫 (初入文坛)

【答案】应助回帖

如果怀疑t=60时初值的准确性,可将t=60时的初值也作为拟合参数。
代码:

!!!using["IMSL","luopt","math"]; //使用命名空间
f(t,CB,CH,dCB,dCH::K1,K2,a,m)=
{
   dCB=-K1*CB^a*(K1/K2*CB^a)^m,
   dCH=K2*(K1/K2*CB^a)^m
};
目标函数(_K1,_K2,_a,_m,CB60,CH60 : tyz : tyArray,tA,K1,K2,a,m)=
{
      K1=_K1, K2=_K2, a=_a, m=_m,      //传递优化变量,函数f中要用到K1,K2,a,m
      tyz=ode[@f,tA,ra1(CB60 ,CH60)],  //补充CB60,CH60为优化参数
      sum[(tyArray-tyz).^2.0,0]
};
main(::tyArray,tA)=
{
      tyArray=matrix{          //存放实验数据ti,yi
          "60        10.9237        0
90        10.7462        0
120        10.4357        0.03778
135        10.1695        0.0432
150        9.7481        0.1203
165        9.2346        0.21242
180        8.6613        0.34579
195        8.0058        0.56225
210        7.2423        0.83487
225        6.4188        1.12793
240        5.5353        1.38079
255        4.5768        1.869
270        4.0146        2.5
285        3.5703        3.01
300        3.1158        3.54452
330        2.4438        4.312
360        1.9878        4.70402
390        1.6668        4.8548"
      },
    tA=tyArray(all:0), //用tA取矩阵的列
    ClearImslErr(),    //清空IMSL错误输出
    ERSET(0,0,0),      //关闭IMSL所有警告
    Opt[@目标函数,optwaysimdeep, optwayconfra,optrange, -1e5,1e5, -1e5,1e5, -1e5,1e5, -1e5,1e5, 10.0,15.0, 0.0,0.03778],  //Opt函数全局优化
    ERSET(0,2,2), ERSET(0,1,0)   //恢复IMSL警告
};

结果(K1,K2,a,m,CB60,CH60,目标函数值):

1.323582077985482e-002    3.022295480133575e-002    0.9970827404206801        -0.8620485362713961       12.34254172021993         2.767575346307145e-008    13.27488182003417
5楼2016-09-17 10:07:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见