这个例子演示了如何使用具体问题具体分析优化工作流程.
这个问题的模型方程是
在哪里
,
,
,
是未知的参数,
答案是,和
是时间。这个问题需要时间数据tdata
(噪声)响应测量ydata
.目标是找到最好的
和
,即那些最小化的值
通常情况下,您有一个问题的数据。在这种情况下,为问题生成人工噪声数据。使用一个= [1,2]
和r = [1,3]
作为基础值,并使用200个随机值0
以3为时间数据。绘制结果数据点。
rng默认的%的再现性一个= [1,2];r = [1,3];tdata = 3 *兰德(200 1);tdata = (tdata)进行排序;%增加的时间更容易绘制noisedata = 0.05 * randn(大小(tdata));%人工噪声ydata = (1) * exp (r (1) * tdata) + (2) * exp (r (2) * tdata) + noisedata;情节(tdata ydata,的r *)包含“t”ylabel“响应”
数据是嘈杂的。因此,解很可能与原始参数不匹配一个
和r
很好。
求最佳拟合参数一个
和r
,首先用这些名称定义优化变量。
一个= optimvar (“一个”2);r = optimvar (“r”2);
为目标函数创建一个表达式,它是要最小化的平方和。
有趣= (1)* exp (r (1) * tdata) + (2) * exp (r (2) * tdata);Obj = sum((fun - ydata).^2);
用目标函数创建一个优化问题obj
.
lsqproblem = optimproblem (“客观”、obj);
对于基于问题的方法,将初始点指定为结构,变量名作为结构的字段。指定初始= (1/2, 3/2)
和初始r = (1/2, 3/2)
.
x0。一个=[1/2,3/2]; x0.r = [-1/2,-3/2];
回顾问题的表述。
显示(lsqproblem)
优化问题:解决:A, r最小化:sum(arg6) where: arg5 = extraParams{3};arg6 =((((1)。* exp ((r(1)。* extraParams{1}))) +((2)。* exp ((r(2)。* extraParams {2})))) - arg5) ^ 2;extraParams
解决这个问题。
[溶胶,fval] =解决(x0 lsqproblem)
使用lsqnonlin解决问题。局部最小值。由于梯度的大小小于最优性公差的值,优化完成。> <停止标准细节
索尔=结构体字段:r: [2×1 double]
fval = 0.4724
绘制结果解和原始数据。
Figure responsedata = evaluate(fun,sol);情节(tdata ydata,的r *、tdata responsedata,中“b -”)传说(“原始数据”,的拟合曲线)包含“t”ylabel“响应”标题(“安装反应”)
图中显示,拟合数据与原始噪声数据吻合较好。
看看拟合参数与原始参数的匹配程度有多高一个= [1,2]
和r = [1,3]
.
disp (sol.A)
1.1615 - 1.8629
disp (sol.r)
-1.0882 - -3.2256
安装参数偏差约15%一个
和8%r
.
fcn2optimexpr
如果目标函数不是由初等函数组成的,则必须使用以下方法将函数转换为优化表达式fcn2optimexpr
.看到将非线性函数转换为优化表达式.对于现在的例子:
有趣= @(右)(1)* exp (r (1) * tdata) + (2) * exp (r (2) * tdata);响应= fcn2optimexpr(有趣,,r);Obj = sum((response - ydata).^2);
解决问题的其余步骤是相同的。唯一的区别是在绘图程序中,你调用响应
而不是有趣的
:
responsedata =评估中(响应,索尔);
有关支持的函数列表,请参见金宝app金宝app支持优化变量和表达式的操作.