主要内容

MultiStart使用lsqcurvefitlsqnonlin

这个例子展示了如何适应函数使用的数据lsqcurvefit在一起MultiStart。结束的例子展示了使用相同的解决方案lsqnonlin

许多配件问题有多个当地的解决方案。万博 尤文图斯MultiStart可以帮助找到全球解决方案,这意味着最适合。这个例子首先使用lsqcurvefit因为它的方便的语法。

模型是

y = 一个 + b x 1 ( c x 2 + d ) ,

输入数据在哪里吗 x = ( x 1 , x 2 ) ,参数 一个 , b , c , d 未知的模型系数。

步骤1。建立目标函数。

编写一个匿名函数,将一个数据矩阵xdataN行和两列,并返回一个响应向量N行。还需要一个系数矩阵的函数p,相应的系数向量 ( 一个 , b , c , d )

xdata fitfcn = @ (p), p (1) + (2) * xdata(: 1)。*罪(p (3) * xdata(:, 2) +(4)页);

步骤2。创建训练数据。

创造200个数据点和响应。使用的值 一个 = - - - - - - 3 , b = 1 / 4 , c = 1 / 2 , d = 1 。在响应中包括随机噪声。

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。没有理由 d 超过 π 绝对值,因为全部的正弦函数值在任意区间的宽度 2 π 。假设系数 c 必须小于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包含一个坐标轴对象。坐标轴对象与标题最好的函数值:1.6464,包含本地解算器调用,ylabel函数值包含2线类型的对象,文本。一个或多个行显示的值只使用标记

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包含一个坐标轴对象。坐标轴对象与标题最好的函数值:1.6464,包含本地解算器调用,ylabel函数值包含2线类型的对象,文本。一个或多个行显示的值只使用标记

MultiStart完成了从开始点。所有50个当地聚合与解算器运行积极解决退出旗。
xmultinonlin =1×4-2.9852 -0.2472 -0.4968 -1.0438
errormultinonlin = 1.6464

再一次,MultiStart找到一个更好的解决方案比当地独自解决。

相关的话题