适合歌唱参数使用优化变量
这个例子展示了如何找到参数,优化一个常微分方程(ODE)在最小二乘意义上,使用优化变量(具体问题具体分析的方法)。
问题
这个问题是一个多步反应模型在内的几种物质,其中一些相互反应产生不同的物质。
对于这个问题,真实的反应速率是未知的。所以,你需要观察和推断出率的反应。假设你可以测量一组次的物质 。从这些观察,配合最好的一组反应速率的测量。
模型
该模型有六个物质, 通过 ,反应如下:
一个 和一个 形成一个反应 在速度
一个 和一个 形成一个反应 在速度
一个 和一个 形成一个反应 在速度
反应速率的乘积成正比的数量所需的物质。所以,如果 代表物质的数量 生产,则反应速率 是 。同样,生产反应速率 是 生产,反应速率 是 。
换句话说,微分方程控制系统的发展
开始时间0点的微分方程 。这些初始值完全确保所有的物质反应,导致 通过 随着时间的增长接近零。
在MATLAB中表达模型
的diffun
函数实现了微分方程的形式准备好解决方案数值
。
类型diffun
函数dydt = diffun (~, y, r) dydt = 0 (6,1);s12 = y y (1) * (2);s34 = y (3) * y (4);dydt (1) = - r (1) * s12;dydt (2) = - r (1) * s12;dydt (3) = - r (2) * s34 + r (1) * s12 - r (3) * s34;dydt (4) = - r (2) * s34 - r (3) * s34;dydt (5) = r (2) * s34;dydt (6) = r (3) * s34;结束
真实的反应率
,
,
。计算系统的演变乘以0到5通过调用数值
。
rtrue = (2.5 1.2 0.45);y0 = [1 1 0 1 0 0];tspan = linspace (0 5);soltrue =数值(@ (t, y) diffun (t y rtrue) tspan, y0);yvalstrue =德瓦尔(soltrue tspan);为i = 1:6次要情节(3、2、1)情节(tspan, yvalstrue(我,:))标题([“y (”num2str(我),“)”])结束
优化问题
准备解决的问题的具体问题具体分析的方法,创建一个三元素优化变量r
的下界0.1
和一个上限的10
。
r = optimvar (“r”3,“下界”,0.1,“UpperBound”10);
这个问题的目标函数的平方和ODE的解决方案与参数之间的区别r
和解决方案真正的参数yvals
。要表达这种目标函数,首先编写一个MATLAB函数计算ODE的解决方案使用参数r
。这个函数是RtoODE
函数。
类型RtoODE
函数solpts = RtoODE (r, tspan, y0)溶胶=数值(@ (t, y) diffun (t、y, r), tspan, y0);solpts =德瓦尔(溶胶,tspan);结束
使用RtoODE
在一个目标函数,利用函数转换为一种优化表达式fcn2optimexpr
。看到将非线性函数优化表达式。
myfcn = fcn2optimexpr (@RtoODE r tspan, y0);
目标函数表示为平方的总和ODE的解决方案和解决方案之间的差异与真正的参数。
obj =总和(和((myfcn - yvalstrue) ^ 2));
创建一个目标函数的优化问题obj
。
概率= optimproblem (“客观”、obj);
解决问题
找到最佳拟合参数r
,给一个初始猜测r0
解算器和电话解决
。
r0。r=(111]; [rsol,sumsq] = solve(prob,r0)
使用lsqnonlin解决问题。局部最小值。优化完成因为梯度的大小小于最优值的宽容。
rsol =结构体字段:r (3 x1双):
sumsq = 3.8659 e15汽油
平方的总和差异基本上是零,这意味着参数解算器发现导致ODE的解决方案与真正的参数匹配的解决方案。所以,正如所料,解决方案包含真正的参数。
disp (rsol.r)
2.5000 1.2000 0.4500
disp (rtrue)
2.5000 1.2000 0.4500
有限的观察
假设你不能观察的所有组件y
,但只有最后的输出y (5)
和y (6)
。你能得到所有的反应速率的值根据有限的信息吗?
为了找到答案,修改功能RtoODE
只返回第五和第六颂歌输出。修改后的ODE求解器RtoODE2
。
类型RtoODE2
函数solpts = RtoODE2 (r, tspan, y0) solpts = RtoODE (r, tspan, y0);solpts = solpts ((5、6):);% y y(5)和(6)结束
的RtoODE2
函数简单地调用RtoODE
然后需要的最后两行输出。
创建一个新的优化表达式RtoODE2
和优化变量r
,时间跨度的数据tspan
,初始点y0
。
myfcn2 = fcn2optimexpr (@RtoODE2 r tspan, y0);
修改的比较数据,包括输出5和6只。
yvals2 = yvalstrue ((5、6):);
创建一个新的目标和新的优化问题从优化表达式myfcn2
和比较数据yvals2
。
methoda =总和(和((myfcn2 - yvals2) ^ 2));prob2 = optimproblem (“客观”,methoda);
解决这个问题基于这一组有限的观察。
[rsol2, sumsq2] =解决(prob2 r0)
使用lsqnonlin解决问题。局部最小值。lsqnonlin停止是因为最后的平方和的变化相对于其初始值小于公差的值函数。
rsol2 =结构体字段:r (3 x1双):
sumsq2 = 2.1616 e-05
再一次,返回的平方和基本上是零。这是否意味着解决者发现正确的反应速率?
disp (rsol2.r)
1.7811 1.5730 0.5899
disp (rtrue)
2.5000 1.2000 0.4500
没有;在这种情况下,新利率完全不同于真正的利率。然而,一个新的颂歌的情节显示解决方案相比,真正的值y (5)
和y (6)
真正的值相匹配。
图绘制(tspan yvals2 (1:)“b -”)举行在ss2 = RtoODE2 (rsol2.r tspan, y0);:情节(ss2 tspan, (1),“r——”)情节(tspan yvals2 (2:)“c -”ss2)情节(tspan (2:)“m——”)传说(“真正y (5) ',“新y (5)”,“真正y (6) ',“新y (6)”,“位置”,“西北”)举行从
识别正确的反应这个问题,你必须观察数据比y (5)
和y (6)
。
情节的所有组件的解决方案与新参数,和策划解决方案真正的参数。
图yvals2 = RtoODE (rsol2.r tspan, y0);为i = 1:6次要情节(3 2,我)情节(tspan, yvalstrue(我,:)“b -”、tspan yvals2(我,:),“r——”)传说(“真正的”,“新”,“位置”,“最佳”)标题(“y (”num2str(我),“)”])结束
使用新的参数,物质 和 排水更慢和物质 不积累。但物质 , , 有完全相同的进化与新的参数和真实的参数。