主要内容

Multistar使用lsqcurvefit.或者lsqnonlin.

此示例显示如何使用函数来使用lsqcurvefit.和...一起多层的。该示例的末尾显示了相同的解决方案lsqnonlin.

许多拟合问题有多个本地解决方案。金宝搏官方网站多层的可以帮助找到全球解决方案,这意味着最合适。此示例首先使用lsqcurvefit.由于其语法方便。

该模型是

y = 一个 + B. X 1 C X 2 + D.

输入数据的位置 X = X 1 X 2 和参数 一个 B. C , 和 D. 是未知的模型系数。

步骤1.创建目标函数。

编写一个匿名函数,采用数据矩阵xdata.N行和两列,并返回响应矢量N行。该功能还采用系数矩阵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 * rand(n,2);% 数据点ydata = fitfcn(preal,xdata)+ 0.1 * randn(n,1);噪声%响应数据

步骤3.设置界限和初始点。

设定界限lsqcurvefit.。没有理由 D. 超过 π 在绝对值,因为正弦函数在其全范围内取值在任何宽度间隔内 2 π 。假设系数 C 必须小于20的绝对值小于20,因为允许高频可能导致不稳定的响应或不准确的收敛。

lb = [-inf,-inf,-20,-pi];UB = [INF,INF,20,PI];

将初始点设置为(5,5,5,0)。

p0 = 5 * in(1,4);%任意初始点p0(4)= 0;%确保初始点满足界限

步骤4.找到最好的本地合适。

将参数适合数据,开始P0.

[Xfitted,errorfited] = LSQCurveFit(FitFCN,P0,XDATA,YDATA,LB,UB)
地方最低可能。LSQCurveFit停止,因为相对于其初始值的平方和总和的最终变化小于功能公差的值。
Xfited =.1×4-2.6149 -0.0238 6.0191 -1.6998
errorfited = 28.2524.

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

步骤5.设置问题多层的

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

问题= createOptimproblem('lsqcurvefit''x0',p0,'客观的',fitfcn,......'磅',磅,'UB',UB,'xdata',xdata,'ydata',ydata);

步骤6.找到全局解决方案。

解决拟合问题多层的有50个迭代。绘制最小的错误作为数量多层的迭代。

ms = multiStart('plotfcns',@ gsplotbestf);[xmulti,errormulti] =运行(ms,问题,50)

图MultiStart包含轴。具有标题最佳功能值的轴:1.6464包含2个类型的类型,文本。

MultiStart完成了所有起始点的运行。所有50个本地解算器运行融合,并使用正本地求解器出口标志。
xmulti =.1×4-2.9852 -0.2472 -0.4968 -1.0438
errormulti = 1.6464

多层的在参数值(-3,-1 / 4,-1 / 2,-1)附近找到全局解决方案。(这相当于附近的解决方案pr=(-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
errowlsqnonlin = 28.2524.

从相同的初始点开始P0.lsqnonlin.发现与较差的解决方案相同lsqcurvefit.

跑步多层的使用lsqnonlin.作为当地的解决者。

问题2 = createOptimproblem('lsqnonlin''x0',p0,'客观的',fitfcn2,......'磅',磅,'UB',UB');[xmultinonlin,errormultinonlin] =运行(ms,问题2,50)

图MultiStart包含轴。具有标题最佳功能值的轴:1.6464包含2个类型的类型,文本。

MultiStart完成了所有起始点的运行。所有50个本地解算器运行融合,并使用正本地求解器出口标志。
xmultinonlin =1×4-2.9852 -0.2472 -0.4968 -1.0438
errormultinonlin = 1.6464

再次,多层的仅找到比本地求解器更好的解决方案。

相关话题