24小时热门版块排行榜    

CyRhmU.jpeg
查看: 2019  |  回复: 10
【悬赏金币】回答本帖问题,作者Evoly_z将赠送您 88 个金币

wlfc

新虫 (初入文坛)

【答案】应助回帖

用OpenLu求解,Lu脚本代码:
!!!using["luopt","math"]; //使用命名空间
f(x,y,dy, params::k1,k2)=
{
    dy=k1*(0.701*exp(-3.211*x)+0.299*exp(-0.067*x))-k2*y,
    0 //必须返回0
};
目标函数(_k1,_k2 : i,s,tyz : tyArray,tA,max,k1,k2)=
{
    k1=_k1, k2=_k2, //传递优化变量
    //最后一个参数50表示gsl_ode函数在计算时,最多循环计算50次,这样可以提高速度
    tyz=gsl_ode[@f,nil,0.0,tA,ra1(0), 1e-6, 1e-6, 2, 1e-6,50],
    i=0, s=0, while{++i<max, s=s+[tyz(i,1)-tyArray(i,1)]^2},
    s
};
main(::tyArray,tA,max)=
{
    tyArray=matrix{ //存放实验数据xi,yi
        "0         0
0.33      0.061043
1         0.03675
2         0.05932
4         0.095993
6         0.072057
10        0.05085
15        0.04678
24        0.047673
30        0.034973
48        0.030375
72        0"
    },
    len[tyArray,0,&max], tA=tyArray(all:0), //用len函数取矩阵的行数,tA取矩阵的列
    Opt1[@目标函数] //Opt1函数全局优化
};

结果:
0.1325616120497096        0.358508535326814         3.242596823546582e-003
11楼2021-08-09 21:27:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 Evoly_z 的主题更新
不应助 确定回帖应助 (注意:应助才可能被奖励,但不允许灌水,必须填写15个字符以上)
信息提示
请填处理意见