24小时热门版块排行榜    

查看: 1446  |  回复: 5

快乐的小尼玛

新虫 (初入文坛)

[求助] 求助常微分方程组的参数优化问题,有没有师兄可以用1stopt帮忙试试? 已有1人参与

师兄师姐们好!

  我最近遇到一个常微分方程组的参数优化问题。方程如下:
dT <- -beta*T*V-h*F*T+rho*R
dI <- beta*T*V -delta*I-k*I*F
dR <- h*F*T-rho*R
dV <- p*I-c*V
dF <- q*I-d*F
其中:
delta = 2*exp(de*(t-7))
beta,p,c,k,h,rho,q,d,de是待优化参数
初值:
T = 2e7
I = 0
R = 0
V = 3
F = 1
需要拟合F和V的实验值:
t        V        F
1        3.5        1.63
2        4.5        2.67
3        5.5        5.35
4        6.5        1.09
5        4.5        1.32
6        1.5        0
7        1.5        0
8        0        0
我尝试用r的minpack.lm包求解,但是试了两万多组初始值,始终达不到好的效果。
目前拟合最好的一组参数如下:
beta =1.7e-07
p = 40
c = 17
k = 0.85
h = 0.2
rho = 1e-07
q = 3e-06
d = 0.74501237318802
de = 1
图在附件:

本人数学功底一般,刚接触这方面话题,有什么说的不清楚的地方请大家指出,我再补充。
平时潜水较多,只有10个金币啦,希望各位师兄师姐帮忙!谢谢!
下面是我的r代码,我有说不清的大家可以看代码(解ode并画图的,不是优化的)。
#Function
my_ode <- function(V_input,F_input,beta = beta,
        de = de,
        p = p,
        c = c,
        k = k,
        h = h,
        rho = rho,
        q = q,
        d = d,
        miu = miu,
        state)
{

        library(deSolve)
        library(minpack.lm)
        library(rlist)

        parameters <- c(beta = beta,
        de = de,
        p = p,
        c = c,
        k = k,
        h = h,
        rho = rho,
        q = q,
        d = d,
        miu=miu)
        Target<-function(t, state, parameters) {
        with(as.list(c(state, parameters)),{
                        delta = 2*exp(de*(t-miu))
                        dT <- -beta*T*V-h*F*T+rho*R
                        dI <- beta*T*V -delta*I-k*I*F
                        dR <- h*F*T-rho*R
                        dV <- p*I-c*V
                        dF <- q*I-d*F
                        list(c(dT, dI, dR, dV, dF))
                })
        }
        times <- seq(0,8,by = 0.01)
        out=ode(y=state,times=times,func=Target,parms=parameters)
        residue = c(log10(out[100,5])-3.5,log10(out[200,5])-4.5,log10(out[300,5])-5.5,log10(out[400,5])-6.5,log10(out[500,5])-4.5,log10(out[600,5])-1.5,log10(out[700,5])-1.5,out[100, 6]-1.64,out[200,6]-2.676,out[300,6]-5.35,out[400,6]-1.09,out[500,6]-1.33)
        residue = sqrt(sum(residue[1:7]^2)/7 + sum(residue[8:12]^2)/5)

        V_curve = log10(out[,5])
        F_curve = out[,6]



        SOUTH<-1; WEST<-2; NORTH<-3; EAST<-4;
         
        GenericFigure <- function(ID, size1, size2, point, line)
        {
          plot(0:8, 0:8, type="n", xlab="X", ylab="Y"
          lines(times,line, col = 2, cex = 2)
          points(point,col=3, pch = 15)
          #text(5,5, ID, col="red", cex=size1)
          box("plot", col="red"
          #mtext(paste("cex",size2,sep="", SOUTH, line=3, adj=1.0, cex=size2, col="blue"
          title(paste("Figure",ID,"(",residue,"",sep=" ")
        }
         
        MultipleFigures <- function()
        {
          GenericFigure("V", 3, 1, V_input, V_curve)
          box("figure", lty="dotted", col="blue"
         
          GenericFigure("F", 3, 1, F_input, F_curve)
          box("figure", lty="dotted", col="blue"
        }
        par(mfrow=c(1,2))
         
        MultipleFigures()
}
#Experimental data

#Initial values
state <- c(T = 2e7,
        I = 0,
        R = 0,
        V = 3,
        F = 1)
#Parameters

leiode<- function(beta,p,c,k,h,rho,q,d,de,miu)
{
        my_ode(V_input,F_input,
        beta = beta,
        de = de,
        p = p,
        c = c,
        k = k,
        h = h,
        rho = rho,
        q = q,
        d = d,
        miu = miu,
        state)
}

#1
V_input = c(3.5,4.5,5.5,6.5,4.5,1.5,1.5,0,0,0)
F_input = c(1.63,2.67,5.35,1.09,1.32)

leiode(1.7e-07, 40, 17, 0.85, 0.2, 1e-07, 3e-06, 0.74501237318802,1,7)

求助常微分方程组的参数优化问题,有没有师兄可以用1stopt帮忙试试?
rplot.png
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dingd

铁杆木虫 (职业作家)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
快乐的小尼玛: 金币+10, ★★★★★最佳答案, 非常感谢! 2016-02-26 22:30:05
1stOpt求这种微分方程拟合问题代码要简单的多,效果也好。
CODE:
ConstStr delta = 2*exp(de*(tt-7));
InitialODEValue tt=0,T = 2e7,I = 0,R = 0,V = 3,F = 1;
Variable tt,V,F;
ODEFunction T' = -beta1*T*V-h*F*T+rho*R;
            I' = beta1*T*V -delta*I-k*I*F;
            R' = h*F*T-rho*R;
            V' = p*I-c*V;
            F' = q*I-d*F;
Data;
tt        V        F
1        3.5        1.63
2        4.5        2.67
3        5.5        5.35
4        6.5        1.09
5        4.5        1.32
6        1.5        0
7        1.5        0
8        0        0

均方差(RMSE):0.85269322610406
残差平方和(SSE):11.6333718055
相关系数(R): 0.877968714324806
相关系数之平方(R^2): 0.770829063333154
修正R平方(Adj. R^2): 0.60992322741393
确定系数(DC): 0.771292669112812
F统计(F-Statistic): -1.4490058555454

参数                  最佳估算
--------------------        -------------
beta1        -6.71463644100751E-8
h        -7.08544427462871
rho        23.3711437688932
de        -0.897079268067582
k        -5.49659440033554
p        0.354150320382865
c        -0.265869901817656
q        0.225238201093483
d        -0.399871335562109
求助常微分方程组的参数优化问题,有没有师兄可以用1stopt帮忙试试?-1
c1.jpg


求助常微分方程组的参数优化问题,有没有师兄可以用1stopt帮忙试试?-2
c2.jpg

2楼2016-02-26 16:12:27
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

快乐的小尼玛

新虫 (初入文坛)

引用回帖:
2楼: Originally posted by dingd at 2016-02-26 16:12:27
1stOpt求这种微分方程拟合问题代码要简单的多,效果也好。

ConstStr delta = 2*exp(de*(tt-7));
InitialODEValue tt=0,T = 2e7,I = 0,R = 0,V = 3,F = 1;
Variable tt,V,F;
ODEFunction T' = -beta1*T*V-h*F* ...

谢谢师兄!
3楼2016-02-26 22:31:45
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

快乐的小尼玛

新虫 (初入文坛)

引用回帖:
2楼: Originally posted by dingd at 2016-02-26 16:12:27
1stOpt求这种微分方程拟合问题代码要简单的多,效果也好。

ConstStr delta = 2*exp(de*(tt-7));
InitialODEValue tt=0,T = 2e7,I = 0,R = 0,V = 3,F = 1;
Variable tt,V,F;
ODEFunction T' = -beta1*T*V-h*F* ...

师兄抱歉,我发帖时候遗漏了对v的描述。
v的实际值我写错了,应该是:
tt        V        F
1        1e3.5        1.63
2        1e4.5        2.67
3        1e5.5        5.35
4        1e6.5        1.09
5        1e4.5        1.32
6        1e1.5        0
7        1e1.5        0
8        0        0
其中v的初始值也是不确定的,我随便选了个3.
我画线时候把v取了10的对数。抱歉师兄,麻烦您能帮我再试试吗?
4楼2016-02-26 23:38:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dingd

铁杆木虫 (职业作家)

1e3.5
这是什么数值表示法?是指10^3.5?
5楼2016-03-02 17:15:43
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

快乐的小尼玛

新虫 (初入文坛)

引用回帖:
5楼: Originally posted by dingd at 2016-03-02 17:15:43
1e3.5
这是什么数值表示法?是指10^3.5?

是的师兄,平时用r比较多,r里面是这么表示的
6楼2016-03-02 22:45:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 学员TjbCZU 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 305分求调剂(食品工程) +5 Sxy112 2026-03-21 7/350 2026-03-24 12:27 by 544594351
[考研] 344求调剂 +3 desto 2026-03-24 3/150 2026-03-24 10:09 by 搏击518
[考研] 一志愿河北工业大学0817化工278分求调剂 +7 jhybd 2026-03-23 12/600 2026-03-24 09:03 by jhybd
[基金申请] 请教下大家 2026年国家基金申请是双盲审吗? +3 lishucheng1 2026-03-22 5/250 2026-03-24 08:22 by gltch
[考研] 求调剂 +7 十三加油 2026-03-21 7/350 2026-03-23 23:48 by 热情沙漠
[考研] 一志愿北京化工大学 070300 学硕 336分 求调剂 +7 vv迷 2026-03-22 7/350 2026-03-23 23:44 by Txy@872106
[考研] 材料专硕英一数二306 +8 z1z2z3879 2026-03-18 8/400 2026-03-23 20:49 by baobaoye
[考研] 0703化学求调剂 +4 奶油草莓. 2026-03-22 5/250 2026-03-23 19:37 by pswait
[考研] 工科材料085601 279求调剂 +8 困于星晨 2026-03-17 10/500 2026-03-23 13:05 by 醉在风里
[考研] 323求调剂 +6 洼小桶 2026-03-18 6/300 2026-03-23 00:29 by king123!
[考研] 一志愿东华大学化学070300,求调剂 +7 2117205181 2026-03-21 8/400 2026-03-22 22:55 by chixmc
[考研] 一志愿华中科技大学071000,求调剂 +4 沿岸有贝壳6 2026-03-21 4/200 2026-03-22 07:21 by ilovexiaobin
[考研] 材料学硕301分求调剂 +7 Liyouyumairs 2026-03-21 7/350 2026-03-21 22:31 by peike
[考研] 材料学硕333求调剂 +3 北道巷 2026-03-18 3/150 2026-03-21 18:17 by 学员8dgXkO
[考研] 求调剂 +3 白QF 2026-03-21 3/150 2026-03-21 13:12 by zhukairuo
[考研] 一志愿重庆大学085700资源与环境专硕,总分308求调剂 +3 墨墨漠 2026-03-18 3/150 2026-03-21 00:39 by JourneyLucky
[考研] 295求调剂 +4 一志愿京区211 2026-03-18 6/300 2026-03-20 23:41 by JourneyLucky
[考研] 材料学求调剂 +4 Stella_Yao 2026-03-20 4/200 2026-03-20 20:28 by ms629
[考研] 求调剂 +3 eation27 2026-03-20 3/150 2026-03-20 19:32 by JourneyLucky
[考研] 一志愿南理工085701环境302求调剂院校 +3 葵梓卫队 2026-03-20 3/150 2026-03-20 19:28 by zhukairuo
信息提示
请填处理意见