主要内容

非线性最小二乘,具体问题具体分析

这个例子演示了如何使用具体问题具体分析优化工作流程

模型

这个问题的模型方程是

y t 一个 1 经验值 r 1 t + 一个 2 经验值 r 2 t

在哪里 一个 1 一个 2 r 1 , r 2 是未知的参数, y 答案是,和 t 是时间。这个问题需要时间数据tdata(噪声)响应测量ydata.目标是找到最好的 一个 r ,即那些最小化的值

t t d 一个 t 一个 y t - y d 一个 t 一个 2

样本数据

通常情况下,您有一个问题的数据。在这种情况下,为问题生成人工噪声数据。使用一个= [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

不支金宝app持的功能要求fcn2optimexpr

如果目标函数不是由初等函数组成的,则必须使用以下方法将函数转换为优化表达式fcn2optimexpr.看到将非线性函数转换为优化表达式.对于现在的例子:

有趣= @(右)(1)* exp (r (1) * tdata) + (2) * exp (r (2) * tdata);响应= fcn2optimexpr(有趣,,r);Obj = sum((response - ydata).^2);

解决问题的其余步骤是相同的。唯一的区别是在绘图程序中,你调用响应而不是有趣的

responsedata =评估中(响应,索尔);

有关支持的函数列表,请参见金宝app金宝app支持优化变量和表达式的操作

另请参阅

相关的话题