MultiStart使用lsqcurvefit
或lsqnonlin
这个例子展示了如何适应函数使用的数据lsqcurvefit
在一起MultiStart
。结束的例子展示了使用相同的解决方案lsqnonlin
。
许多配件问题有多个当地的解决方案。万博 尤文图斯MultiStart
可以帮助找到全球解决方案,这意味着最适合。这个例子首先使用lsqcurvefit
因为它的方便的语法。
模型是
输入数据在哪里吗 ,参数 , , , 未知的模型系数。
步骤1。建立目标函数。
编写一个匿名函数,将一个数据矩阵xdata
与N
行和两列,并返回一个响应向量N
行。还需要一个系数矩阵的函数p
,相应的系数向量
。
xdata fitfcn = @ (p), p (1) + (2) * xdata(: 1)。*罪(p (3) * xdata(:, 2) +(4)页);
步骤2。创建训练数据。
创造200个数据点和响应。使用的值 。在响应中包括随机噪声。
rng默认的%的再现性N = 200;%数据点的数量preal = [3、1/4、1/2, 1];%的系数xdata = 5 *兰德(N, 2);%的数据点ydata = fitfcn (preal xdata) + 0.1 * randn (N, 1);%与噪声响应数据
步骤3。设置边界和初始点。
设置范围lsqcurvefit
。没有理由
超过
绝对值,因为全部的正弦函数值在任意区间的宽度
。假设系数
必须小于20的绝对值,因为允许高频可能导致不稳定的反应或不准确的收敛。
磅=(负负无穷,-20年,-π);乌兰巴托=(π正无穷,正无穷,20日);
设置初始点任意(5 5 5 0)。
p0 = 5 * 1 (1,4);%任意初始点p0 (4) = 0;%保证初始点满足边界
步骤4。找到最好的地方。
合适的参数数据,开始p0
。
[xfitted, errorfitted] = lsqcurvefit (p0, fitfcn xdata, ydata,磅,乌兰巴托)
局部最小值。lsqcurvefit停止是因为最后的平方和的变化相对于其初始值小于公差的值函数。
xfitted =1×4-2.6149 -0.0238 6.0191 -1.6998
errorfitted = 28.2524
lsqcurvefit
找到一个本地解决方案,不是特别接近模型参数值(3、1/4、1/2,1)。
第5步。设置的问题MultiStart
。
创建一个问题结构MultiStart
可以解决同样的问题。
问题= createOptimProblem (“lsqcurvefit”,“x0”p0,“目标”fitfcn,…“磅”磅,乌兰巴托的乌兰巴托,“xdata”xdata,“ydata”,ydata);
步骤6。找到一个全球性的解决方案。
解决装配问题MultiStart
和50个迭代。图的最小错误的数量MultiStart
迭代。
= MultiStart(女士“PlotFcns”,@gsplotbestf);[xmulti, errormulti] =运行(ms,问题,50)
MultiStart完成了从开始点。所有50个当地聚合与解算器运行积极解决退出旗。
xmulti =1×4-2.9852 -0.2472 -0.4968 -1.0438
errormulti = 1.6464
MultiStart
发现附近的一个全球性的解决方案参数值(3、1/4、1/2,1)。(这是相当于附近的一个解决方案preal
=(3、1/4、1/2,1),因为改变除第一次调用外的所有系数的符号相同的数值fitfcn
)。常态的残留误差减小约28约为1.6,减少10倍以上。
制定问题lsqnonlin
另一种方法,使用lsqnonlin
作为拟合函数。在这种情况下,使用预测值之间的差异和实际数据值作为目标函数。
fitfcn2 = @ (p) fitfcn (p, xdata) -ydata;[xlsqnonlin, errorlsqnonlin] = lsqnonlin (p0, fitfcn2磅,乌兰巴托)
局部最小值。lsqnonlin停止是因为最后的平方和的变化相对于其初始值小于公差的值函数。
xlsqnonlin =1×4-2.6149 -0.0238 6.0191 -1.6998
errorlsqnonlin = 28.2524
从相同的初始点p0
,lsqnonlin
发现相同的相对贫穷的解决方案lsqcurvefit
。
运行MultiStart
使用lsqnonlin
作为当地的解决者。
问题2 = createOptimProblem (“lsqnonlin”,“x0”p0,“目标”fitfcn2,…“磅”磅,乌兰巴托的乌兰巴托的);[xmultinonlin, errormultinonlin] =运行(女士,问题2,50)
MultiStart完成了从开始点。所有50个当地聚合与解算器运行积极解决退出旗。
xmultinonlin =1×4-2.9852 -0.2472 -0.4968 -1.0438
errormultinonlin = 1.6464
再一次,MultiStart
找到一个更好的解决方案比当地独自解决。