多头使用lsqcurvefit要么lsqnonlin

这个例子说明如何使用适合于数据的功能lsqcurvefit和...一起多头。该示例的端示出了使用相同的溶液lsqnonlin

很多装修问题有多种解决方案的地方。金宝搏官方网站多头可以帮助寻找全球性解决方案,这意味着最合适的。本示例首先使用lsqcurvefit由于其方便的语法。

该模型是

ÿ = 一个 + b X 1 C X 2 + d

其中输入数据是 X = X 1 X 2 和参数 一个 b C d 是未知的模型系数。

步骤1.创建目标函数。

编写匿名函数,需要一个数据矩阵XDATAñ行和两列,并返回一个响应向量ñ行。该功能还需要一个系数矩阵p中,对应于系数矢量 一个 b C d

fitfcn = @(P,XDATA)P(1)+ P(2)* XDATA(:,1)* SIN(P(3)* XDATA(:,2)+ P(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,因为允许高频可能导致不稳定的反应或不准确的收敛。

磅= [-Inf,-Inf,-20,-pi];UB = [天道酬勤,天道酬勤,20,PI];

任意设定的初始点(5,5,5,0)。

P0 = 5个*也是(1,4);%任意初始点P0(4)= 0;%确保初始点满足边界

第4步:找到当地最好的契合。

适合的参数的数据,起始于P0

[xfitted,errorfitted] = lsqcurvefit(fitfcn,​​P0,XDATA,YDATA,LB,UB)
当地最小的可能。lsqcurvefit停止,因为在相对于其初始值的平方和最终的变化小于函数允差值。
xfitted =1×4-2.6149 -0.0238 6.0191 -1.6998
errorfitted = 28.2524

lsqcurvefit找到本地的解决方案,没有特别的靠近模型参数值(-3,1 / 4,1 / 2,1)。

第5步:设置的问题多头

创建一个问题结构,多头可以解决同样的问题。

问题= createOptimProblem('lsqcurvefit''X0',P0,'目的',fitfcn,...'磅',磅,'UB',UB,“外部数据”,XDATA,'YDATA',YDATA);

第6步:找到一个全球性的解决方案。

解决使用拟合问题多头50次迭代。绘制最小误差的数多头迭代。

MS =多头('PlotFcns',@ gsplotbestf);[x多重测光,errormulti] =运行(毫秒,问题,50)

多头完成了从全部开始点运行。所有50个当地求解器运行融合以积极的局部解算器出口标志。
x多重测光=1×4-2.9852 -0.2472 -0.4968 -1.0438
errormulti = 1.6464

多头发现附近的参数值的全局溶液(-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(fitfcn2,P0,LB,UB)
当地最小的可能。lsqnonlin停止,因为在相对于其初始值的平方和最终的变化小于函数允差值。
xlsqnonlin =1×4-2.6149 -0.0238 6.0191 -1.6998
errorlsqnonlin = 28.2524

从相同的初始点开始P0lsqnonlin查找相同的相对较差的溶液作为lsqcurvefit

多头运用lsqnonlin作为当地的求解。

problem2 = createOptimProblem('lsqnonlin''X0',P0,'目的',fitfcn2,...'磅',磅,'UB',UB');[xmultinonlin,errormultinonlin] =运行(MS,problem2,50)

多头完成了从全部开始点运行。所有50个当地求解器运行融合以积极的局部解算器出口标志。
xmultinonlin =1×4-2.9852 -0.2472 -0.4968 -1.0438
errormultinonlin = 1.6464

再次,多头发现比单独的本地求解一个更好的解决方案。

相关话题