Main Content

Multistart使用lsqcurvefit.orlsqnonlin.

This example shows how to fit a function to data usinglsqcurvefit.和...一起多层。示例的末尾显示了相同的解决方案lsqnonlin.

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

The model is

y = 一种 + B. X 1 C X 2 + D. 的)

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

步骤1.创建目标函数。

Write an anonymous function that takes a data matrixxdata.N.行和两列,并返回响应矢量N.rows. The function also takes a coefficient matrixP.,对应于系数矢量 一种 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 。Include random noise in the response.

rng默认% For reproducibilityN.=200;% Number of data pointspreal = [-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 must be smaller than 20 in absolute value, because allowing a high frequency can cause unstable responses or inaccurate convergence.

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

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

p0 = 5 * of(1,4);%任意初始点p0(4)= 0;% Ensure the initial point satisfies the bounds

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

适合数据的参数,开始P.0

[xfitted,errorfitted] = 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,......'lb'那lb,'ub'那ub,'xdata',xdata,'ydata'那yD.一种ta);

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

使用多层有50个迭代。绘制最小的错误作为数量多层迭代。

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

图MultiStart包含一个轴对象。具有标题最佳函数值的轴对象:1.6464包含2个类型的类型,文本。

多层Completed the runs from all start points. All 50 local solver runs converged with a positive local solver exit flag.
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), because changing the sign of all the coefficients except the first gives the same numerical values offitfcn。)残余误差的规范从约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.

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

多层使用lsqnonlin.一种s the local solver.

P.roblem2 = createOptimProblem('lsqnonlin''x0',p0,'客观的'那fitfcn2,......'lb'那lb,'ub',UB');[xmultinonlin,errormultinonlin] =运行(ms,问题2,50)

图MultiStart包含一个轴对象。具有标题最佳函数值的轴对象:1.6464包含2个类型的类型,文本。

多层Completed the runs from all start points. All 50 local solver runs converged with a positive local solver exit flag.
xmultinonlin =1×4-2.9852 -0.2472 -0.4968 -1.0438
errormultinonlin = 1.6464

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

Related Topics